【问题标题】:Need help understanding the ImageMagick/Graphicsmagick -colors option需要帮助了解 ImageMagick/Graphicsmagick -colors 选项
【发布时间】:2011-05-12 04:53:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: image image-processing image-manipulation imagemagick graphicsmagick


    【解决方案1】:

    第一个问题,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中的一个错误。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 谢谢你,但我已经阅读了所有可用的文档。我现在的主要问题是阻止 GraphicsMagick 用透明像素替换不透明像素。 ImageMagick 不会发生这种情况,我可以在 GraphicsMagick 中阻止它的唯一方法是将色彩空间设置为透明;问题是这会增加文件的大小。
      • 在操作解决该问题后,是否会展平图像以消除透明度?
      • 抱歉,Orbling,我不明白。我想保留图像的透明度。
      【解决方案3】:

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

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

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

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

      如果接近你想要的,可能选择 1、4、8 位,如果颜色很多,可能选择 jpeg。

      【讨论】:

      • 您好,感谢您的回复,这就是我的想法,但 ImageMagick 允许您出于某种原因指定无限的颜色值。我需要图像保持相同的格式,JPEG 也会导致图像失去透明度。你知道我遇到的通用汽车透明度问题吗?再次感谢您的宝贵时间。
      • 只有 GIF 吗?在 GIF 中,有一个调色板条目被指定为透明颜色——也许它们的颜色匹配意外地将丢失的颜色映射到它。这可能会发生,因为实际上有一种颜色被指定为透明颜色(它不是 0 alpha 的颜色)。这听起来像一个错误。如果您使用的是 Windows,请试用我们的免费映像 SDK for .NET atalasoft.com/photofree
      • 不,它只发生在 PNG 文件中。我正在使用 Linux,我不能在这个项目中使用 .NET。感谢您的帮助。
      • PNG 中完全透明的颜色仍然是 Alpha 设置为 0 的颜色。我怀疑它们的颜色匹配没有考虑 Alpha。
      • 是的,我在想透明色被选为图像中的主色。似乎没有任何选择可以阻止这种情况。不幸的是,我找不到很多了解 GraphicsMagick 的人,所以很难解决这样的问题。
      猜你喜欢
      • 1970-01-01
      • 2017-06-19
      • 2016-05-03
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多