我试图拍摄两张彩色编码的gif图像并将它们合并为一张图片,以及其他几种我需要从头开始制作彩色gif图像的情况。我可以从一个gif图像复制到一个新的' P'图像,但颜色不会复制。我最终得到了黑白/灰度图像,而不是我开始使用的图像的精确副本。我只是从头开始尝试这一点,以确保在继续前进之前我已经进行了处理。到目前为止,我还没有完成这个过程。
from PIL import Image
filename = '/media/image1.gif'
im = Image.open(filename);
size = width, height = im.size
coordinates = x,y = width, height
img = Image.new('P',coordinates)
pixels = img.load()
for x in range(img.size[0]):
for y in range(img.size[1]):
coordinates = x,y
pixels[x,y]=im.getpixel(coordinates)
img.show()
如果让颜色转移过来我做错了什么?
答案 0 :(得分:1)
我建议使用im.convert('RGB')
手动重新创建im的调色板,因为调色板的内容很难记录。
pal_inds = list(im.getdata()) # e.g. [1, 4, 5, ...]
pal_rgbs = list(im.convert('RGB').getdata()) # e.g. [(255, 255, 0), ...]
pal_map = dict((zip(pal_inds, pal_rgbs)))
然后使用putpalette
创建一个带调色板的新图像,其中包含来自pal_map
的展平值列表:
img = Image.new("P", im.size, 0)
palette = [pal_map[i] for i in sorted(pal_map)]
flat_palette = [ind for rgb in palette for ind in rgb]
img.putpalette(flat_palette)
然后你应该可以像以前一样使用pixels
。此外,this可能有所帮助。