2017-04-23 112 views
0

是否有可能在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

回答

0

GIF格式僅支持8位的調色板條目。

即使支持較少,節省的成本也很低:7位爲12.5%,6位爲25%。

+0

但我可以生成一個.gif圖像比原來小,如果我將調色板從256更改爲128或64,32 ..等等?這是我的目標。我在imageio庫中找到一個小選項「palettesize = n」來設置該設置。 – Madno

+0

你不明白:GIF不支持。 –

+0

我知道的是支持「最大8」,但我可以在我眼中看到結果。我改變了一個.gif圖像的調色板大小,並且我獲得了一個非常小的.gif圖像。 – Madno