[英]Python PIL - Merge Multiple Layers of Images into One
我有多张带有白色背景的PNG图像,并且图像的某些部分填充有图案(可能是不同的颜色,黑色,蓝色,红色,黄色等)。
如何使用Python PIL库将所有这些图像合并到一个图像中,以便所有非白色部分都出现在一个图像上?
举个例子,
我有以下3个PNG图片:
现在,我想将所有这些图像合并为一张图像,以使背景仍然是白色,但是所有图案都出现在一张图像上。
例如,我选择了2张图像并尝试了以下操作:
#! /usr/bin/python
from PIL import Image
background = Image.open("check00001.png")
foreground = Image.open("check00002.png")
background.paste(foreground, (0, 0), foreground)
background.show()
但是它以这样的方式合并图像:仅其中一个图像的内容可见。
我需要对大量图像进行此操作,其中每个图像仅占最终图像的一小部分。
据我所知,您可以使用Pillow轻松地将图像的白色像素转换为透明像素,并将它们逐层遮盖。
要将白色像素转换为透明像素 ,您需要先将图像数据转换为缓冲区,然后从缓冲区重新创建它,这是示例代码:
from PIL import Image
# your loop here
img = Image.open('img.png')
img = img.convert("RGBA")
datas = img.getdata()
newData = []
for item in datas:
if item[0] == 255 and item[1] == 255 and item[2] == 255:
newData.append((255, 255, 255, 0))
else:
newData.append(item)
img.putdata(newData)
img.save("mod_img1.png", "PNG")
然后像在代码中一样进行常规粘贴。
background = Image.open("mod_img1.png")
foreground = Image.open("mod_img2.png")
background.paste(foreground, (0, 0), foreground)
background.show()
您可以使用安装在大多数Linux发行版中且可用于macOS和Windows的ImageMagick轻松地完成此操作。 因此,假设您的图像称为a.png
, b.png
和c.png
,则可以在终端中运行:
convert a.png \
\( b.png -transparent white \) -composite \
\( c.png -transparent white \) -composite result.png
那就是说... “将图像a.png
作为具有白色背景的基本图像,加载b.png
并使所有白色像素透明并合成第一幅图像的顶部。然后对c.png
进行相同c.png
并将输出保存为result.png
“ 。
请注意,我还添加了黑色边框,以便您可以在StackOverflow的白色背景上辨别图像的范围。
请注意,如果您使用的是ImageMagick v7或更高版本,该命令将变为:
magick a.png \
\( b.png -transparent white \) -composite \
\( c.png -transparent white \) -composite result.png
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.