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

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

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

有帮助吗?

解决方案 3

第一个问题,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导致此错误。

其他提示

减少颜色数量仅在以下情况下才有用:

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

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

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

如果接近您想要的,可以选择 1、4、8 位;如果有很多颜色,可以选择 jpeg。

我觉得ImageMagick的设施你以后可能会量化:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top