首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ImageMagick: PNG的无损最大压缩?

ImageMagick: PNG的无损最大压缩?
EN

Stack Overflow用户
提问于 2014-12-03 08:41:30
回答 5查看 66.2K关注 0票数 50

当使用ImageMagick保存到无损PNG时,我希望达到最大的压缩量。我正在对许多PSD进行批量转换。

我尝试了一些东西,但在我看来,得到的PNG图像并不像原来的图像那么清晰,虽然我的妻子看不到它。

这些是我正在使用的当前论点:

代码语言:javascript
运行
复制
convert -depth 24 -define png:compression-filter=1 \ 
  -define png:compression-level=9 -define png:compression-strategy=2 

根据:http://www.imagemagick.org/script/command-line-options.php#define

http://www.w3.org/TR/PNG-Filters.html

这意味着:

  • 压缩滤波器为1(子)
  • 最大压缩级别9
  • 压缩策略是2 huffman_only (所以没有过滤,虽然这种压缩过滤器应该是无损的)

根据文档:“有效值为0到4,意味着默认、过滤、huffman_only、rle和固定的zlib压缩策略。如果您使用的是不支持Z_RLE (1.2.0之前)或Z_FIXED (1.2.2.2之前)的旧ZLIB,则值3和4将分别使用zlib默认策略。”

顺便说一下,我的图像是960x720像素。

(如果使用默认压缩策略0,则会得到大文件。可能是9的压缩过滤器和0的压缩策略正在产生更小的图像,但我仍然不确定它是否是无损的)。

问题:

  1. 这是无损压缩吗?如果没有,哪里有错误?
  2. 知道如何实现更好的无损压缩吗?
EN

Stack Overflow用户

发布于 2014-12-03 10:40:01

在压缩PNG时,我不会只依赖ImageMagick (除非有某种原因超出了您自己的控制范围,迫使您使用ImageMagick)。

要将ImageMagick的结果与之进行比较,一个很好的选择是压碎,或者它的较新的继承者optipng

与ImageMagick相比,这两种方法在优化和压缩方面都取得了更好的效果。通常,他们也比IM慢,因为他们可以蛮力不同的方法,然后保持最小的结果。

话虽如此,现在ImageMagick.

convert定义PNG质量的标准方法是使用-quality {level}{filter}参数。

不过,您使用通过使用-define png:...控件组合获得的更细粒度的控件是正确的。

用于PNG的-quality与JPEG的质量设置非常不同(后者只是从0100的整数)。

对于PNG来说,它是由两个个位数组成的:

  • 第一个数字({level})是(很大程度上) zlib压缩级别,它可以从09。 (然而,0的设置有一个特殊的含义:当您使用它时,您将得到Huffman压缩,而不是zlib压缩级别0。这往往更好..。奇怪但却是真的。
  • 第二个数字({ filter })是PNG数据编码过滤器类型(在压缩之前):
代码语言:javascript
运行
复制
- 0 means none, 
- 1 means "sub", 
- 2 means "up", 
- 3 means "average", 
- 4 means "Paeth", and 
- 5 means "adaptive".

在实际中的结果是:

  • 对于彩色实心序列的插图,霍夫曼用“无”滤波器(-quality 00)压缩通常是最合适的。
  • 对于自然景观的照片,“自适应”滤波(-quality 05)通常是最好的。

若要将其转换为命令行语法,请尝试以下设置:

代码语言:javascript
运行
复制
 -define png:compression-level=0  \
 -define png:compression-filter=5 \ 
 -define png:compression-strategy=2 

最后,如果我真的想比较压缩后图像的不同(但接近)清晰度,我经常使用frequently的出色的flicker_cmp脚本。

让你妻子来测试..。:-)

P.S.:这里是关于PNG压缩技术的一个很好的指南。

票数 47
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27267073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档