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

Python 将颜色从一个gif图像复制到新的gif图像,python,python-imaging-library,Python,Python Imaging Library,我正在尝试将两张彩色编码的gif图像合并成一张图像,再加上其他几种需要从头开始生成彩色gif图像的情况。我可以从一个gif图像复制到一个新的“P”图像,但颜色无法复制。我最终得到的是一张黑白/灰度图像,而不是我开始时的图像的精确副本。我只是从头开始尝试,以确保在继续前进之前,我已经停止了进程。到目前为止,我还没有完成这个过程 from PIL import Image filename = '/media/image1.gif' im = Image.open(filename); size

我正在尝试将两张彩色编码的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()

让颜色转换过来,我做错了什么?

我建议使用
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)))
然后使用
putplate
pal\u 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)

然后您应该能够像以前一样使用
像素
。另外,可能会有所帮助。

GIF图像是彩色索引的。你有没有想办法复制调色板?我想我可能会迷失的是索引颜色的概念。我以为颜色数字是0-255。正如我最初所说的,我正在考虑去掉单个像素的颜色,然后将与显示的颜色相关的值相加,并用添加的值生成一个新的图形。我不认为复制调色板会有什么不同,是吗?颜色数字只是数字,而不是RGB值。这些数字和实际的RGB颜色之间有一个映射,称为。他们说类似于
img.palete.getvalues()
的东西应该会给你调色板数据,你可能会复制它,看看文档。我一直在阅读过去的问题,这就是我得到的感觉。我肯定没有意识到颜色(RGB值)不是固定值,而是由用户/程序员设置的。我很快就学到了很多。我也开始意识到,获得调色板并不是一个很大的问题,但我没有看到任何东西显示你如何设置调色板。你只需要创建一个元组,把调色板放在一个元组中,然后引用这个元组来选择颜色。我知道我刚才说了什么,但如果我是对的话,那么做就是另一回事了。今晚我到家时,我得考虑一下这个想法。我可能有点过头了。