将颜色从一个gif图像复制到新的gif图像

时间:2014-01-29 21:34:11

标签: python python-imaging-library

我试图拍摄两张彩色编码的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()

如果让颜色转移过来我做错了什么?

1 个答案:

答案 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可能有所帮助。