OpenBSD下压缩PNG的利器pngcrush

OpenBSD的安装、升级、更新等日常问题。

版主: chenjun天地乾坤

回复
头像
随缘
钠 Na
帖子: 4
注册时间: 2010-04-02 6:19

OpenBSD下压缩PNG的利器pngcrush

帖子 随缘 » 2010-04-11 23:21

pngcrush 是一个用来批量压缩 PNG 格式图片的工具,使用pngcrush大概可以减少png图像大小 50% 左右。 你可以用它对一个目录内的所有png文件进行压缩。

关于png文件的简要介绍:
PNG 格式-PNG 格式 基本介绍
PNG 格式
便携网络图形 (PNG) 格式是作为 GIF 的无专利替代品开发的,用于无损压缩和在 Web 上显示图像。 与 GIF 不同,PNG 支持 24 位图像并产生无锯齿状边缘的背景透明度;但是,某些 Web 浏览器不支持 PNG 图像。 PNG 格式支持无 Alpha 通道的 RGB、索引颜色、灰度和位图模式的图像。 PNG 保留灰度和 RGB 图像中的透明度。
PNG(Portable Network Graphics)是一种新兴的网络图像格式。在1994年底,由于Unysis公司宣布GIF拥有专利的压缩方法,要求开发GIF软件的作者须缴交一定费用,由此促使免费的png图像格式的诞生。PNG一开始便结合GIF及JPG两家之长,打算一举取代这两种格式。1996年10月1日由PNG向国际网络联盟提出并得到推荐认可标准,并且大部分绘图软件和浏览器开始支持PNG图像浏览,从此PNG图像格式生机焕发。


下面是在i386版本的OpenBSD4.6稳定版上安装pngcrush:

设置packages路径,然后使用pkg_add命令安装:

代码: 全选

# [B][color=Sienna]export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/[/color]
# [color=Sienna]pkg_add pngcrush[/color][/B]
pngcrush-1.6.19: complete
我们尝试压缩一个文件:

代码: 全选

# [B][color=Sienna]cd /home/png[/color]
# [color=Sienna]pngcrush discuz-001.png discuz-001-new.png[/color][/B]

 | pngcrush 1.6.19
 |    Copyright (C) 1998-2002,2006-2009 Glenn Randers-Pehrson
 |    Copyright (C) 2005      Greg Roelofs
 | This is a free, open-source program.  Permission is irrevocably
 | granted to everyone to use this version of pngcrush without
 | payment of any fee.
 | Executable name is pngcrush
 | It was built with libpng version 1.2.37, and is
 | running with  libpng version 1.2.37 - June 4, 2009

 |    Copyright (C) 1998-2004,2006-2009 Glenn Randers-Pehrson,
 |    Copyright (C) 1996, 1997 Andreas Dilger,
 |    Copyright (C) 1995, Guy Eric Schalnat, Group 42 Inc.,
 | and zlib version 1.2.3.3, Copyright (C) 1998-2002 (or later),
 |    Jean-loup Gailly and Mark Adler.
 | It was compiled with gcc version 3.3.5 (propolice).

   Recompressing discuz-001.png
   Total length of data found in IDAT chunks    =    54081
unknown chunk handling done.
   IDAT length with method   1 (fm 0 zl 4 zs 0) =    34426
   IDAT length with method   2 (fm 1 zl 4 zs 0) =    41260
   IDAT length with method   3 (fm 5 zl 4 zs 1) =    53139
   IDAT length with method   4 (fm 0 zl 9 zs 1) =    29250
   IDAT length with method   7 (fm 0 zl 9 zs 0) =    28285
   Best pngcrush method = 7 (fm 0 zl 9 zs 0) for discuz-001-new.png
     (47.70% IDAT reduction)
     (47.58% filesize reduction)

   CPU time used = 0.410 seconds (decoding 0.080,
          encoding 0.230, other 0.100 seconds)

#
pngcrush的效率还是很高的,注意其输出信息,原来的png文件的大小减小了47.58%。

代码: 全选

# [B][color=Sienna]ls -la[/color][/B]
total 672
drwxr-xr-x  2 root  wheel    512 Apr 11 05:26 .
drwxr-xr-x  4 root  wheel    512 Apr 11 05:02 ..
[B][color=RoyalBlue]-rw-r--r--  1 root  wheel  28423 Apr 11 05:06 discuz-001-new.png
-rw-r--r--  1 root  wheel  54219 Apr 11 05:02 discuz-001.png[/color][/B]
我们比较一下压缩后的效果:

这个是压缩前的:

图片

下面是压缩后的:

图片

有差别吗?至少大家用肉眼很难观察出来。

此外我们在本例中仅压缩了一个文件,如果使用-d参数可以批量压缩一个目录内的所有png文件,
pngcrush的选项不太多,直接在shell下键入pngcrush就可以看到帮助信息。

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客