PIL:将RGB图像转换为特定的8位调色板?
使用Python Imaging Library,我可以调用
img.convert("P", palette=Image.ADAPTIVE)
要么
img.convert("P", palette=Image.WEB)
但是有没有办法转换为任意调色板?
p = []
for i in range(0, 256):
p.append(i, 0, 0)
img.convert("P", palette=p)
它将每个像素映射到图像中最接近的颜色的位置?还是为此提供支持,仅此Image.WEB
而已?
-
在查看源代码时,
convert()
我看到它引用了im.quantize
。
quantize
可以接受调色板参数。如果提供的图像具有调色板,则此功能将采用该调色板并将其应用于图像。例:
src = Image.open("sourcefilewithpalette.bmp") new = Image.open("unconvertednew24bit.bmp") converted = new.quantize(palette=src) converted.save("converted.bmp")
另一个提供的答案对我不起作用(它做了一些非常糟糕的双调色板转换之类的事情,),但是此解决方案起作用了。