Python PIL:使用透明背景创建索引的彩色图像

我想知道如何创建一个透明背景的图像,只有2种索引颜色(红色和蓝色)来最小化文件大小?

更具体地说,我有两个我要转换的黑白图像,一个是透明和蓝色,另一个是透明和红色.然后我想合并这两个图像.我可以使用常规的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

转载注明原文:Python PIL:使用透明背景创建索引的彩色图像 - 代码日志