前言
本文介绍了一个用于图片合成的 Python 代码示例。该代码使用了PIL库来处理图片文件,并通过嵌套循环将多张图片按照指定的行数和列数进行合成。最终生成的合成图片保存在本地。
效果图
1. 导入必要的库
from PIL import Image import os
这段代码导入了PIL库中的Image模块,用于处理图片文件。同时还导入了os模块,用于处理文件和目录。
2. 打开文件并获取大小
im = Image.open('./图片合成/img_f/办公室美女 黑色裙子 电脑壁纸.jpg') w, h = im.size
通过Image.open()
函数打开了一个指定路径的图片文件,并将其赋值给变量im
。然后使用.size
属性获取图片的宽度和高度,并分别赋值给变量w
和h
。
3. 设置生成图片的行数和列数
image_row = 3 image_column = 5
定义了要生成的图片的行数和列数,分别赋值给变量image_row
和image_column
。这里设置为3行5列,即生成一个3x5的图片。
4. 获取所有图片的名称列表
names = os.listdir('./图片合成/img_f')
使用os.listdir()
函数获取指定目录下所有文件的名称,并将其存储在names
列表中。这里的目录是'./图片合成/img_f'
。
5. 创建新的画布
new_img = Image.new('RGB', (image_column * w, image_row * h)) • 1
使用Image.new()
函数创建一个新的画布,指定画布的模式为RGB(彩色图像),大小为生成图片的行数乘以每张图片的高度和列数乘以每张图片的宽度。将创建的画布赋值给变量new_img
。
6. 遍历每个位置并粘贴图片
for y in range(image_row): for x in range(image_column): o_img = Image.open('./图片合成/img_f/' + names[image_column * y + x]) new_img.paste(o_img, (x * w, y * h))
使用嵌套的for
循环遍历每个位置。外层循环控制行数,内层循环控制列数。在每个位置上,通过计算得到要合成的图片的索引,使用Image.open()
函数打开对应的图片文件,并将其赋值给变量o_img
。然后使用new_img.paste()
方法将该图片粘贴到新的画布上,指定粘贴的位置为(x * w, y * h)。
7. 保存合成的图片
new_img.save('new_img.jpg')
调用new_img.save()
方法将合成的图片保存到本地,保存的路径为'new_img.jpg'
。
整个代码的功能是将指定目录下的多张图片按照指定的行数和列数进行合成,并保存为一张新的图片。合成的图片大小为每张图片的宽度乘以列数和每张图片的高度乘以行数。
完整代码
# 导入必要的库 from PIL import Image import os # 打开文件并获取大小 im = Image.open('./图片合成/img_f/办公室美女 黑色裙子 电脑壁纸.jpg') w, h = im.size # 设置生成图片的行数和列数 image_row = 3 image_column = 5 # 获取所有图片的名称列表 names = os.listdir('./图片合成/img_f') # 创建新的画布 new_img = Image.new('RGB', (image_column * w, image_row * h)) # 遍历每个位置并粘贴图片 for y in range(image_row): for x in range(image_column): o_img = Image.open('./图片合成/img_f/' + names[image_column * y + x]) new_img.paste(o_img, (x * w, y * h)) # 保存合成的图片 new_img.save('new_img.jpg')
图片来源
图片来源代码可以参考这篇博客
结束语
通过本文的讲解,你学习了一个用于图片合成的Python代码示例。该代码使用了PIL库来处理图片文件,并演示了如何将多张图片按照指定的行数和列数进行合成。希望本文对你理解和使用图片处理相关的代码有所帮助。