ImageMagick会创建一些相当大的PNG。 GraphicsMagick好多了,但我仍然在寻找与convert一起使用的最佳选项,以获得最小的文件大小。
我在这里有一个large png with a small filesize,并通过IM转换传递这个文件大小,更不用说让它变小了。使用GM转换器,我可以稍微缩小一点,但我正在寻找改进,一般用于任何图像我遇到过。
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盒子上使用的东西。)
答案 0 :(得分:11)
看起来你和我正在寻找相同的答案。不幸的是,似乎没有很多人对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它不会这样做。
答案 1 :(得分:6)
我刚刚再次遇到这个问题所以我会更新,GraphicsMagick和ImageMagick有一个严重的问题。他们无法使用tRNS块写出PNG图像,这意味着如果您尝试读取具有tRNS块的图像然后将其写出,则图像将更大。 GM不是压缩图像的最佳工具。在使用Image / GraphicsMagick之后,您需要使用单独的工具(如OptiPNG)再次压缩PNG。在图像上运行GraphicsMagick后,使用OptiPNG时,我的文件减少了60%。
此外,我想知道您是否遇到过有关RGBA图像和位深度的问题。对于某些图像,我得到“无效位深度”异常。我看不出任何理由。
答案 2 :(得分:2)
我还没有找到在命令行中执行此操作的方法,但我确实发现这个免费网站(http://tinypng.org/)做得很好,我的测试图像减少了71%,最终尺寸为只有原来的29%。看起来你一次可以给它20张图像。我正在调查他们是如何做到的。