我有一个支持4色图形的设备(很像以前的CGA).
我想使用PIL读取图像并使用我的4色调色板(红色,绿色,黄色,黑色)进行转换,但我无法弄清楚它是否可能.我发现一些邮件列表存档帖子似乎暗示其他人已经尝试这样做并且失败了.
一个简单的python示例将非常感谢!
如果添加一些内容然后将图像转换为字节字符串,其中每个字节代表4个像素的数据(每两个位代表一个0到3的颜色),则可获得奖励积分
使用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,没有别的?
使用Pillow 5.4.1,Python 3.6.8
给定一个image.png具有9种不同颜色的图像,并给一个具有5种不同颜色的数据调色板,人们可能会希望pillow将图像缩小为所描述的调色板,从而使生成的图像仅包含该调色板中的颜色。
但是,使用该im.im.convert方法返回的图像具有超出指定调色板的颜色。具体来说,它们始终是灰度图像(R==B==G值)
示例代码,为原始图像,调色板和转换后的图像输出唯一的颜色集。
from PIL import Image
im = Image.open("image.png")
# create palette from raw data
# colours: Red, Green, Blue, Black, and White (5 total)
RGBBW = [(255,0,0), (0,255,0), (0,0,255), (0,0,0), (255,255,255)]
data = sum([list(x) for x in RGBBW], [])[:256]
pimg = Image.new("P",(16,16))
pimg.putpalette(data)
# Hack
im.convert("RGB")
cim_ = im.im.convert("P", 0, pimg.im)
cim = im._new(cim_).convert("RGB")
def colors(im):
cs = []
for x in range(im.width):
for y in range(im.height): …Run Code Online (Sandbox Code Playgroud)