更改.gif图像中每个像素的颜色数量?

问题描述:

是否有可能在Python中将256色gif图像重新映射为128色或64色gif图像?更改.gif图像中每个像素的颜色数量?

我想它使用的ImageIO库

import imageio 

def myfunction(inputgif, outputgif, duration): 
    gifimage = imageio.mimread(inputgif) 
    for i in range(len(gifimage)): 
    gifimage[i] = gifimage[i]/4 

    with imageio.get_writer(outputgif, mode='I', duration=duration) as writer: 
     for x in range(len(gifimage)): 
     writer.append_data(gifimage[x]) 
    writer.close() 

它的工作,但是,问题是图像文件仍然认为“他的宇宙”是色256个可能的值(从0到255) ,而不是从0到64(因为我把所有的值除以4)。这使图像变得更暗,而不是使用64(4位)可能的颜色。

我的目标是通过减少颜色数量来获得有损数据压缩。

+0

你知道吗,一种理智的方法将使用某种向量量化(优化保留的颜色)和自定义颜色调色板(仅使用以前计算的颜色)?这与你的代码非常不同!我不知道你用什么方法期待什么(它在一些空间中进行线性颜色转换;根据你的期望远离有损耗)。可能有许多库正在做这件事,但是用python自己实现这一切可能是一些工作。 – sascha

+0

@sascha谢谢。你能给我一些关于我可以使用的图书馆的例子吗? – Madno

+1

那么,最流行的一个(在开源世界):[ImageMagick](http://www.imagemagick.org/Usage/quantize/)。 – sascha

GIF格式仅支持8位的调色板条目。

即使支持较少,节省的成本也很低:7位为12.5%,6位为25%。

+0

但我可以生成一个.gif图像比原来小,如果我将调色板从256更改为128或64,32 ..等等?这是我的目标。我在imageio库中找到一个小选项“palettesize = n”来设置该设置。 – Madno

+0

你不明白:GIF不支持。 –

+0

我知道的是支持“最大8”,但我可以在我眼中看到结果。我改变了一个.gif图像的调色板大小,并且我获得了一个非常小的.gif图像。 – Madno