[英]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.