如何使用 python 将多张图片合并在一起?
How do you merge multiple pictures together using python?
我想在 python 中使用 PIL 合并三个图像。我花了一段时间试图合并三张图片,但我能够合并两张。
我知道关于合并两个图像的问题 (How to merge a transparent png image with another image using PIL)
这是我的代码:
def addImageList(imageNameList):
((Image.open(imageNameList[0]).paste(Image.open(imageNameList[1]), (0, 0),
Image.open(imageNameList[1]))).paste(Image.open(imageNameList[2]), (0, 0),
Image.open(imageNameList[2]))).show()
运行时,出现错误:
AttributeError: 'NoneType' object has no attribute 'paste'
我试过只合并两张图片,效果很好。
Image.paste
returns None, for the same reason list.sort
做到了。您不是在创建新图像,而是在修改现有图像。在 Python 中,当代码依赖于副作用时,默认的期望是接口不是“流畅”。
即使可行,尝试一步完成所有操作只会使代码更加复杂。当 Image.open
调用提前发生时更容易阅读 - 这也避免了重复这些调用。此外,如果您希望图像名称列表包含更多名称,这样的代码不会自然扩展。
一次只做一步。我们可以使用一个简单的循环来遍历第一个图像名称之后的图像名称。 (另请注意标准 Python 命名约定。)
def compose_images(image_names):
bg_name, *other_names = image_names
image = Image.open(bg_name)
for fg_name in other_names:
foreground = Image.open(fg_name)
image.paste(foreground, (0, 0), foreground)
image.show()
我想在 python 中使用 PIL 合并三个图像。我花了一段时间试图合并三张图片,但我能够合并两张。
我知道关于合并两个图像的问题 (How to merge a transparent png image with another image using PIL)
这是我的代码:
def addImageList(imageNameList):
((Image.open(imageNameList[0]).paste(Image.open(imageNameList[1]), (0, 0),
Image.open(imageNameList[1]))).paste(Image.open(imageNameList[2]), (0, 0),
Image.open(imageNameList[2]))).show()
运行时,出现错误:
AttributeError: 'NoneType' object has no attribute 'paste'
我试过只合并两张图片,效果很好。
Image.paste
returns None, for the same reason list.sort
做到了。您不是在创建新图像,而是在修改现有图像。在 Python 中,当代码依赖于副作用时,默认的期望是接口不是“流畅”。
即使可行,尝试一步完成所有操作只会使代码更加复杂。当 Image.open
调用提前发生时更容易阅读 - 这也避免了重复这些调用。此外,如果您希望图像名称列表包含更多名称,这样的代码不会自然扩展。
一次只做一步。我们可以使用一个简单的循环来遍历第一个图像名称之后的图像名称。 (另请注意标准 Python 命名约定。)
def compose_images(image_names):
bg_name, *other_names = image_names
image = Image.open(bg_name)
for fg_name in other_names:
foreground = Image.open(fg_name)
image.paste(foreground, (0, 0), foreground)
image.show()