本文提供两种方案实现多种图像拼接成同一张。
第一种
from PIL import Image
import os
# 文件夹路径
folder_path = './new_images/'
# 获取文件夹中的特定的图像文件
image_files = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith(('png', 'jpg', 'jpeg'))]
# 读取第一张图像以获取大小
first_image = Image.open(image_files[0])
image_width, image_height = first_image.size
# 设置图像间隔距离为20像素
padding = 20
# 计算新图像的总尺寸 (此实例是是十张图像进行拼接成两行五列的形状)
new_image_width = image_width * 5 + padding * 4 # 5列,有4个间隔
new_image_height = image_height * 2 + padding * 1 # 2行,有1个间隔
# 创建新图像,背景色为白色
new_image = Image.new('RGB', (new_image_width, new_image_height), (255, 255, 255))
# 将图像逐一粘贴到新图像中
for index, image_file in enumerate(image_files):
img = Image.open(image_file)
# 计算粘贴位置
x_offset = (index % 5) * (image_width + padding)
y_offset = (index // 5 )* (image_height + padding)
# 粘贴图像
new_image.paste(img, (x_offset, y_offset))
# 保存合并后的图像
new_image.save('combined_image_with_padding.jpg')
上述代码实现的特点有:
- 是十张图像进行 “两行五列”的格式进行拼接,因为自己也可以
根据需要去设定拼接格式
,不过需要稍微改一下某几行的代码。 - 上述代码实现的是有左右间隔以及上下间隔的代码,因此这个也可以
根据自己的需要进行间隔设定
- 可以实现对文件夹中的
特定后缀的图像进行筛选后再拼接
,只需要改变其中的某一行代码就行
第二种
此方法可以较快的实现全部图像横排或者纵排的拼接。
# 实现横向拼接和纵向拼接
dirs = os.listdir("./new_images/")
img_array = ''
img = ''
for i, v in enumerate(paths):
path = os.path.join("./new_images/", v)
if i == 0:
img = Image.open(path) # 打开图片
img_array = np.array(img) # 转化为np array对象
if i > 0:
img_array2 = np.array(Image.open(path))
# img_array = np.concatenate((img_array, img_array2), axis=1) # 横向拼接
img_array = np.concatenate((img_array, img_array2), axis=0) # 纵向拼接
img = Image.fromarray(img_array)
# 保存图片
img.save('concat-axis=0.jpg')