【问题标题】:Change number of colors for each pixel in .gif image?更改 .gif 图像中每个像素的颜色数?
【发布时间】:2017-09-20 03:30:16
【问题描述】:

是否可以在 Python 中将 256 色 gif 图像重新映射(例如)为 128 色或 64 色 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 位)可能的颜色。

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

【问题讨论】:

  • 您知道,一个理智的方法会使用某种矢量量化(优化保留的颜色)和自定义调色板(仅使用先前计算的颜色)?这与您的代码非常不同!我不知道您对您的方法有何期望(它在某些空间中进行线性颜色变换;根据您的期望远离有损)。可能有很多库都在这样做,但是用 python 自己实现这一切可能是一些工作。
  • @sascha 谢谢。你能给我一些我可以使用的库的例子吗?
  • 嗯,最受欢迎的之一(在开源世界中):ImageMagick
  • 为什么要压缩?

标签: python image image-processing


【解决方案1】:

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

即使它支持的更少,节省的费用也是微不足道的:7 位节省 12.5%,6 位节省 25%。

【讨论】:

  • 但是如果我将调色板从 256 更改为 128 或 64、32.. 等,我可以生成比原始图像更小的 .gif 图像?这就是我的目标。我在 imageio 库中找到了一个小选项,即“palettesize=n”来设置该设置。
  • 你不懂:GIF不支持。
  • 我所知道的是支持“最大8”,但我可以看到结果。我更改了 .gif 图像的调色板大小,得到了一个非常小的 .gif 图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
相关资源
最近更新 更多