14

ImageMagick 创建了一些非常大的 PNG。GraphicsMagick 要好得多,但我仍在寻找与 convert 一起使用的最佳选项,以获得最小的文件大小 png。

我这里有一个带有小文件大小的大 png,并且通过 IM convert 传递它我无法达到那个文件大小,更不用说让它变小了。使用 GM convert 我可以让它稍微小一点,但我正在寻找改进,通常是针对我遇到的任何图像。

gm convert -quality 95 a_png.png gm.png
convert -quality 95 -depth 8 a_png.png im.png
gm identify *

a_png.png PNG 2560x2048+0+0 PseudoClass 256c 8-bit 60.1K 0.000u 0:01
gm.png[1] PNG 2560x2048+0+0 PseudoClass 256c 8-bit 60.0K 0.000u 0:01
im.png[2] PNG 2560x2048+0+0 DirectClass 8-bit 130.2K 0.000u 0:01 

哪些转换选项会产生最小的 PNG 文件大小?

(是的,我对 OptiPNG、PNGOUT 和 Pngcrush 很熟悉。但我所追求的东西在我碰巧在的每个 *nix 盒子上都可以毫无疑问地使用。)

4

3 回答 3

13

看起来你和我正在寻找相同的答案。不幸的是,似乎没有多少人对 GraphicsMagick 有很好的了解。这是我目前学到的,

质量运算符不适用于 JPEG 以外的任何图像。对我来说,它只是在 PNG 和 GIF 上使用时使文件大小变大。

我已经对我的 PNG 和 GIF 文件执行此操作以减小它们的大小:

gm convert myImage.png +dither -depth 8 -colors 50 myImage.png
  • +dither减少颜色时停止图像的任何抖动。(这会减小文件大小)

  • -depth 8可能是不必要的,因为大多数 PNG 文件已经是深度 8。

  • -colors 50将图像中的颜色数量减少到 50,这是真正减小以 PNG 或 GIF 等无损格式存储的图像大小的唯一方法。

显然,为了获得最佳图像质量/尺寸比,您不能在不知道当前深度和颜色数量的情况下仅减少图像深度或颜色数量。为了确定此信息,我正在执行以下操作

gm identify -format "file_size:%b,unique_colors:%k,bit_depth:%q" myImage.png

为了我的形象;这返回

file_size:100.7k,unique_colors:13455,bit_depth:8

问题是当 GraphicsMagick 减少颜色时,它总是减少到至少 255,所以你不能将颜色的数量设置为 300。PNG文件的alpha通道似乎也存在问题;如果图像中有透明度,则减少颜色会将这些颜色替换为透明;使用 imagemagick 它不会这样做。

于 2010-11-24T12:43:21.460 回答
7

我刚刚再次遇到这个问题,所以我会更新,GraphicsMagick 和 ImageMagick 有一个严重的问题。他们无法使用 tRNS 块写出 PNG 图像,这意味着如果您尝试读取具有 tRNS 块的图像然后将其写出,则图像会大得多。GM 不是压缩图像的最佳工具。使用 Image/GraphicsMagick 后,您需要使用单独的工具(例如 OptiPNG)再次压缩 PNG。在图像上运行 GraphicsMagick 后使用 OptiPNG 时,我的文件最多可缩小 60%。

另外我想知道您是否遇到过有关 RGBA 图像和位深度的问题。对于某些图像,我收到“无效位深度”异常。我看不出有什么理由。

于 2011-04-21T09:56:20.250 回答
3

我还没有找到在命令行中执行此操作的方法,但我确实找到了这个做得很好的免费网站 ( http://tinypng.org/ ),我的测试图像减少了 71%,最终大小为只有原版的 29%。看起来你一次可以给它 20 张图像。我正在研究他们是如何做到的。

http://tinypng.org/

于 2013-05-03T03:23:16.760 回答