我想知道如何使用透明背景創建圖像,並且只有兩種索引顏色(紅色和藍色)可以最大限度地減小文件大小?Python PIL:創建帶有透明背景的索引彩色圖像
更具體地說,我有兩個黑白圖像,我想轉換,一個透明和藍色,另一個透明和紅色。然後我想合併這兩張圖片。我可以用普通的RGBA圖像來做到這一點,但我真的希望將顏色編入索引以最小化文件大小。
理想情況下與PIL,但其他Python庫也可以工作。
我想知道如何使用透明背景創建圖像,並且只有兩種索引顏色(紅色和藍色)可以最大限度地減小文件大小?Python PIL:創建帶有透明背景的索引彩色圖像
更具體地說,我有兩個黑白圖像,我想轉換,一個透明和藍色,另一個透明和紅色。然後我想合併這兩張圖片。我可以用普通的RGBA圖像來做到這一點,但我真的希望將顏色編入索引以最小化文件大小。
理想情況下與PIL,但其他Python庫也可以工作。
所以我設法做到了,使用「調色板」圖像類型,但生成的文件沒有我期望的那麼小... 這是我的代碼,以防其對別人有用,或者如果有人可以改進它。
from PIL import Image
im = Image.open("image1.png")
imP = im.convert('RGB').convert('P', palette=Image.ADAPTIVE, colors=3)
imP.putpalette([
0, 0, 0, # index 0 is black background
0, 0, 255, # index 1 is blue
255, 0, 0, # index 2 is red ])
im2 = Image.open("image2.png")
imP2L = im2.convert('L') # need a greyscale image to create a mask
mask = Image.eval(imP2L, lambda a: 255 if a == 0 else 0)
imP.paste(2, mask) # Paste the color of index 2 using image2 as a mask
imP.save('out3.png', transparency = 0, optimize = 1) # Save and set index 0 as transparent
一旦合併了這兩幅圖像,就不會再有兩種顏色 - 顏色將根據每個像素位置上每幅圖像的透明度進行組合。最糟糕的情況是,你將擁有256 * 256 = 65536種顏色,這些顏色不能被索引,如果你這樣做的話不會很好壓縮。
我會建議保存爲PNG,並讓無損壓縮盡其所能。
從你的問題我想你想要完整的8位透明度,而不是1個透明的顏色。當然這很簡單! –