0

我正在尝试以编程方式减小(有损)PNG 和 GIF 文件的文件大小。作为其中的一部分,我需要减少图像中的颜色数量。我不想将所有图像减少为单一颜色值,所以我正在做的是;然后获取图像中唯一颜色的数量;将此数字除以 2 可将颜色数量减少一半。

问题是这不起作用。使用 ImageMagic 太慢了,并且不会减小文件大小,除非图像具有几百种独特的颜色。无论原始图像中有多少颜色,使用 GraphicsMagick 始终会产生低于 255 的唯一颜色值。GraphicsMagick 的另一个问题是,如果图像中有任何透明像素,它会用透明替换丢失的颜色。

任何帮助将不胜感激,谢谢。

4

3 回答 3

1

减少颜色的数量只有在以下情况下才有用

  1. 然后图像可以使用调色板而不是存储每个像素的颜色
  2. 调色板索引的大小小于颜色的大小
  3. 图像格式支持调色板大小

我认为这些格式只能获得 1 位、4 位、8 位,因此 2 色、16 色或 256 色。我想如果你要求更多,你只会被截断为 256。如果你要求更少,它就不会使用整个调色板。

您是否考虑过转换为 JPEG 并使用质量设置?你最终会得到更精细的有损控制。缺点是如果图像不是照片,但听起来它们有很多颜色,所以它们可能是。

如果它接近你想要的,也许选择 1、4、8 位,如果它有很多颜色,则选择 jpeg。

于 2010-11-18T18:54:42.487 回答
1

我认为您所追求的 ImageMagick 工具可能是量化:

http://www.imagemagick.org/Usage/quantize/

于 2010-11-19T01:48:57.173 回答
0

第一个问题,GraphicsMagick 可以使用 8 位、16 位或 32 位量子级别进行编译。我的版本编译成 8 位(默认),这意味着可以分配给图像的最大颜色数是 256 种唯一颜色(3*3*2,去除 1 个蓝色位,因为人眼可以'看不到它正确)。显然,GraphicsMagick 可以处理比这更多颜色的图像,但是在减少颜色时它只能减少到 256 或更少颜色。更大的像素量子会导致 GraphicsMagick 运行更慢并需要更多内存。例如,使用 16 位像素量子导致 GraphicsMagick 的运行速度比它构建为支持 8 位像素量子时慢 15% 到 50%(并占用两倍的内存)。

第二个问题;PNG图像中的透明度处理,我使用的是早期版本的GraphicsMagick(我认为是1.1),无论如何,当我升级到1.3时,这个问题不再存在,这告诉我这是导致此问题的GraphicsMagick 1.1中的一个错误。

于 2010-12-01T16:46:27.103 回答