PIL:将RGB图像转换为特定的8位调色板?

mcc*_*ean 8 python image palette

使用Python Imaging Library,我可以打电话

img.convert("P", palette=Image.ADAPTIVE)
Run Code Online (Sandbox Code Playgroud)

要么

img.convert("P", palette=Image.WEB)
Run Code Online (Sandbox Code Playgroud)

但有没有办法转换为任意调色板?

p = []
for i in range(0, 256):
    p.append(i, 0, 0)
img.convert("P", palette=p)
Run Code Online (Sandbox Code Playgroud)

它会将每个像素映射到图像中最接近的颜色?或者这是否支持Image.WEB,没有别的?

小智 7

在查看源代码时,convert()我看到它引用了im.quantize. quantize可以采用调色板参数.如果您提供具有调色板的图像,则此功能将采用该调色板并将其应用于图像.

例:

    src = Image.open("sourcefilewithpalette.bmp")
    new = Image.open("unconvertednew24bit.bmp")
    converted = new.quantize(palette=src)
    converted.save("converted.bmp")
Run Code Online (Sandbox Code Playgroud)

另一个提供的答案对我不起作用(它做了一些非常糟糕的双调色板转换或其他东西,但是这个解决方案确实如此).