我有一個透明的PNG圖像「foo.png」 ,我已經打開了一個圖像與如何使用PIL
im = Image.open("foo2.png");
現在
另一個圖像合併透明PNG圖像,我需要的是合併FOO .png與foo2.png。
(foo.png包含一些文字,我想打印foo2.png文本)
我有一個透明的PNG圖像「foo.png」 ,我已經打開了一個圖像與如何使用PIL
im = Image.open("foo2.png");
現在
另一個圖像合併透明PNG圖像,我需要的是合併FOO .png與foo2.png。
(foo.png包含一些文字,我想打印foo2.png文本)
import Image
background = Image.open("test1.png")
foreground = Image.open("test2.png")
background.paste(foreground, (0, 0), foreground)
background.show()
第一個參數是.paste()
粘貼圖像。其次是座標,祕密醬是第三個參數。它表示將用於粘貼圖像的蒙版。如果您傳遞帶有透明度的圖像,則Alpha通道將用作蒙版。
檢查docs。
哇!這樣可行 !!謝謝 – Arackna 2011-03-16 11:53:03
我錯過了祕密醬油,謝謝! :D – 2011-10-31 10:42:34
爲了確保前景在所有情況下都包含透明度,請使用'foreground.convert('RGBA')'作爲mask參數。 – 2012-10-04 02:28:51
Image.paste
不能按預期工作,當背景圖像也包含透明度。你需要使用真實的Alpha Compositing。
枕頭2.0包含一個alpha_composite
功能,可以做到這一點。
background = Image.open("test1.png")
foreground = Image.open("test2.png")
Image.alpha_composite(background, foreground).save("test3.png")
編輯:兩個圖像都需要是RGBA類型。所以你需要調用convert('RGBA')
,如果它們是調色板等。如果背景沒有alpha通道,那麼你可以使用常規的粘貼方法(應該更快)。
由於OLT已經指出,Image.paste
不能正常工作,當源和目的地都包含字母。
考慮以下情形:
兩個測試圖像,既包含字母:
layer1 = Image.open("layer1.png")
layer2 = Image.open("layer2.png")
合成圖像使用Image.paste
像這樣:
final1 = Image.new("RGBA", layer1.size)
final1.paste(layer1, (0,0), layer1)
final1.paste(layer2, (0,0), layer2)
會生成以下圖像(覆蓋的紅色像素的Alpha部分完全取自第二層。的像素不被正確地混合):使用Image.alpha_composite
像這樣
合成圖像:
final2 = Image.new("RGBA", layer1.size)
final2 = Image.alpha_composite(final2, layer1)
final2 = Image.alpha_composite(final2, layer2)
產生以下的(正確的)圖像:
人們可以也可以使用混合:
im1 = Image.open("im1.png")
im2 = Image.open("im2.png")
blended = Image.blend(im1, im2, alpha=0.5)
blended.save("blended.png")
這一個爲我辯護。圖像必須具有完全相同的大小,但沒關係。粘貼功能並沒有完全削減我的... – 2017-10-04 11:42:36
不要在Python中使用';'命令的末尾:這很醜陋... – nosklo 2011-03-16 11:48:14
我會在腦海中記住這些,謝謝! – Arackna 2011-03-16 12:39:57