为什么我可以将 RGB 图像转换为 17 个调色板,但不能更少?(Python Pillow 版本 10.1.0)

Why can I convert an RGB image to a 17 color palette, but no fewer? (Python Pillow version 10.1.0)

提问人:user3382426 提问时间:11/17/2023 最后编辑:user3382426 更新时间:11/18/2023 访问量:53

问:

使用的图像似乎无关紧要。下面是RGB图像:
blue/black gradient

import numpy as np
import PIL
from PIL import Image

img = Image.open('sigh.png')

img_P17 = img.convert('P', palette = Image.Palette.ADAPTIVE, colors = 17) # 17 color palettized image
img_P17.show()

# Fewer than 17 color palette conversion not working for some reason:
img_P16 = img.convert('P', palette = Image.Palette.ADAPTIVE, colors = 16) # 16 color palettized image
img_P16.show() #ValueError: conversion not supported

pil_17_color_palette_vs_16_color_palette

python python-imaging-library 调色板

评论

0赞 Ouroborus 11/17/2023
提供一个最小的、可重现的示例。(代码图像几乎从来都没有用。
0赞 Mark Setchell 11/17/2023
也请分享您的图像 - Google Drive 或 Dropbox 或 Github 或一些可能需要的,如果大或 TIFF。
0赞 user3382426 11/18/2023
这是一张图片和我发布的另一张照片完全相同的代码。
0赞 Mark Setchell 11/18/2023
旁白:我认为你错过了@Ouroborus的观点。代码的图像绝对完全相同 - 它既不可搜索,也不可编辑,也不可运行。在回答中,请尝试 。print(img.mode)
1赞 Ture Pålsson 11/18/2023
我可以重现这个(Pillow 10.1.0、Python 3.12.0、macOS 14.1.1)。这与图像从每像素 8 位变为 4 位有关,而 PNG 保存机制会感到困惑并尝试从“P”转换为“P”;4 英寸模式。如果您只是这样做,则保存图像有效,但不能使用 。对我来说看起来像一个枕头虫。img_P16.save('foo.png')img_P16.save('foo.png', save_all=True)

答: 暂无答案