【问题标题】:What options for convert (ImageMagick or GraphicsMagick) produce the smallest (filesize) PNG?哪些转换选项(ImageMagick 或 GraphicsMagick)会产生最小(文件大小)的 PNG?
【发布时间】:2011-05-12 19:09:06
【问题描述】:

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

我这里有一个large png with a small filesize,通过 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 盒子上都可用。)

【问题讨论】:

  • 将其转换为 1x1 PNG8 的那些。
  • 当你可以在机器上执行脚本时,你也可以在上面放文件,对吧?静态链接 pngcrush 并将其放在您正在使用的 *nix 盒子上怎么样?
  • @thejh,是的,我可以做到。然而,这在生产环境中通常是不可接受的。此外,IM/GM 可能是最常用的图形包。所以我确信这只是找到正确选择的问题......
  • Gimp 生成非常小的 png(通常比 PNGOUT 和 PNGCrush 更好)。但如果您需要高性能,这可能不是最佳解决方案,对吗?
  • 是的,感谢您的建议,但是 Gimp 在无头服务器上编写/部署脚本有点困难。 :)

标签: compression png imagemagick graphicsmagick


【解决方案1】:

看起来你和我正在寻找相同的答案。不幸的是,似乎没有多少人对 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 它不会这样做。

【讨论】:

  • 同样对于 JEPGS,您可以添加 +profiles "*" 以从图像中删除任何配置文件,这将略微减小图像大小。我认为因为我们都在尝试做同样的事情,所以我们可以在这个问题上分享知识。如果您发现更多信息或有任何疑问,请给我留言。谢谢。
  • 感谢 toc777 提供的信息丰富的帖子。一个更正: -quality 肯定会对 PNG 的文件大小产生影响,但它的操作与 jpeg 不同,请阅读规范了解详细信息,我发现 -quality 95 可以制作最小的 png。这是一个 bash one 班轮来演示: for i in {1..100};做 gm 转换 big_yet_small.png -quality $i $i.png;完成
  • 我们也遇到了 GM 透明度错误。它似乎会触发较大的图像,首先使用 IM 缩小尺寸,然后使用 GM 处理是一种解决方法。需要提交错误报告...
  • 嘿 Jonah,我也在做同样的事情,但后来发现这个问题在较新的 GraphicsMagick(1.3) 中得到了修复。好吧,它适用于我一直在测试的所有图像。我猜这个错误已修复,但我找不到任何错误报告。
  • 欲了解更多信息,请查看我的回答stackoverflow.com/questions/4217960/…
【解决方案2】:

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

我还想知道您是否遇到过有关 RGBA 图像和位深度的问题。对于某些图像,我收到“无效位深度”异常。我看不出任何原因。

【讨论】:

    【解决方案3】:

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

    http://tinypng.org/

    【讨论】:

    • 2013 年可能是免费的
    猜你喜欢
    • 2011-06-25
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2023-03-23
    • 2014-09-07
    相关资源
    最近更新 更多