Compression 转换的哪些选项(ImageMagick或GraphicsMagick)生成最小(文件大小)的PNG?

Compression 转换的哪些选项(ImageMagick或GraphicsMagick)生成最小(文件大小)的PNG?,compression,png,imagemagick,graphicsmagick,Compression,Png,Imagemagick,Graphicsmagick,ImageMagick创建了一些相当大的PNG。GraphicsMagick要好得多,但我仍在寻找与convert一起使用的最佳选项,以获得最小的文件大小png 我这里有一个,通过IM转换我无法达到这个文件大小,更不用说更小了。使用GM convert,我可以使它稍微变小,但我正在寻求改进,一般来说,对于我遇到的任何图像 gm convert -quality 95 a_png.png gm.png convert -quality 95 -depth 8 a_png.png im.png gm

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

我这里有一个,通过IM转换我无法达到这个文件大小,更不用说更小了。使用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文件大小?


(是的,我对optpng、PNGOUT和Pngcrush很熟悉。但我想要的是在我碰巧打开的每个*nix框上都可以毫无疑问地找到的东西。)

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

“质量”操作符不能正确处理JPEG以外的任何图像。对我来说,当在PNG和GIF上使用时,它只会使文件大小变大

我已对PNG和GIF文件执行了以下操作以减小其大小:

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

  • -depth 8
    可能是不必要的,因为大多数PNG文件已经是depth 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,它不能做到这一点。

我又遇到了这个问题,所以我会更新,GraphicsMagick和imagemagick有一个严重的问题。他们不能用tRNS块写出PNG图像,这意味着如果你试图读入一个有tRNS块的图像,然后写出它,图像会大得多。GM不是压缩图像的最佳工具。使用Image/GraphicsMagick后,需要使用单独的工具(如optpng)再次压缩PNG。在图像上运行GraphicsMagck后,使用OptiPNG时,我得到的文件小了60%


另外,我想知道您是否遇到了关于RGBA图像和位深度的问题。对于一些图像,我得到一个“无效位深度”异常。我看不出任何原因。

我还没有在命令行中找到这样做的方法,但我确实发现这个免费网站()做得非常好,我的测试图像缩小了71%,最终大小只有原来的29%。看起来你一次可以给它20张图片。我正在调查他们是怎么做的


将其转换为1x1 PNG8的功能。当您可以在机器上执行脚本时,也可以将文件放在机器上,对吗?静态链接pngcrush并将其放在您正在使用的*nix框中如何?@thejh,是的,我可以做到。但是,这在生产环境中通常是不可接受的。此外,IM/GM可能是最常用的图形软件包。所以我确信这只是找到正确的选择的问题…Gimp产生非常小的PNG(通常比PNGOUT和PNGCrush更好)。但如果您需要高性能,它可能不是最好的解决方案,是吗?是的,谢谢您的建议,但Gimp在无头服务器上编写/部署有点困难。:)同样对于JEPGS,您可以添加+profiles“*”以从图像中删除任何配置文件,这将略微减小图像大小。我认为,因为我们都在努力做同样的事情,我们可以在这个问题上分享知识。如果您发现其他信息或有任何问题,请给我留言。谢谢。谢谢你提供的关于toc777的信息。一个更正:-质量肯定会对png的文件大小产生影响,但它的操作与jpeg不同,请阅读规范了解详细信息,我发现-quality 95可以制作最小的png。这里有一个bash-one-liner来演示:对于{1..100}中的i;gm是否转换big_yout_small.png-quality$i$i.png;doneWe也遇到了通用汽车透明度漏洞。它似乎会在较大的图像上触发,首先用IM缩小尺寸,然后用GM处理是一个解决办法。需要提交错误报告…嘿,Jonah,我也在做同样的事情,但后来发现这个问题在更新的GraphicsMagick(1.3)中得到了修复。好吧,我一直在测试的所有图像都已修复。我猜这个bug已经修复了,但是我找不到任何关于它的bug报告。更多信息请查看我的答案,它可能在2013年是免费的