我想知道如何创建具有透明背景和仅使用2种索引颜色(红色和蓝色)以最小化文件大小的图像?
更具体地说,我有两张黑白图片想要转换,一张变成透明和蓝色,另一张变成透明和红色。然后我想要合并这两张图片。我可以用常规的RGBA图像来完成,但我真的希望将颜色索引化以尽可能减少文件大小。
最好使用PIL,但其他Python库也可以。
我想知道如何创建具有透明背景和仅使用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
PA
模式下创建图像,但它不允许你保存它。我真的认为你应该将它保存为RGBA
,如果你真的需要更小的尺寸,可以使用专门用于此任务的实用程序。 - Mark Ransom