压缩网页图片

不压不知道,一压吓一跳,大部分图片几乎都能在近似无损的情况下压缩掉 65% 原始大小左右,如果指明有损压缩,比如 jpeg 的 85 %,还能更小。

Smush.it

smushit 现在已经属于 Yslow 的一部分了,可以通过 firefox 插件使用,也能在线用,缺点就是你的图片必须能够从公网访问。

可以压缩各种图片,按照官方的解释,它会尝试各种工具和算法,找到最优的方式。因此,smushit 是一种很安全的压缩工具,几乎看不到差别,就是用起来麻烦些。

imagemagick

不同的图片格式有各自的特点,比如 gif 善于存储颜色较少的图片,也是动画图片的首选;png 善于存储能够矢量化的图片,jpg 则善于存储颜色、图片变化都比较多的图片。根据不同的图片特点,进行类型转换,有时能收到不错的效果。

图片 convert 之后,还可以利用其它工具进一步压缩,不过效果不大了。

另附一个转换图片类型之后,批量替换模板中调用文件名的脚本:

grep logo.gif * -R | awk '{print $1}' | sed 's/://' | xargs -I '{}' sed -i 's/logo.gif/logo.jpg/' '{}'

jpegoptim

这是今天刚发现的好东西,ubuntu 源中有,主要可以用它去除 jpg 图片文件当中的 comment exif IPTC 等无用标记,我测试的情况压缩率比 smushit 略低一点点。由于能够通过命令行使用,所以易用性更强。

一般我喜欢用 --strip-all 参数去除所有无用内容,实际压缩之前可以用 -n 参数预测一下压缩率(默认直接压缩覆盖源文件了),24bit Adobe 类型的图片基本上都能够压缩掉 65% 原始大小,碰到 24bit JFIF 这种类型的图片一般压不动,但带上有损压缩参数比如 -m85之后,依然能够达到较理想的压缩率,并且图片损失效果不明显。

遇到无法压缩的图片、压缩后体积反而增大的图片会自动跳过,很贴心。

基本上,有了上面三种方式,就能够处理大部分网页图片了。

IE 6.0仍然无法显示PNG图片文件的原貌?

最近写一个帮助的时候无意中发现了这个有意思的事情,本来我都是在Mozilla中查看所编写的帮助文件的,突然想看一下它在IE中的效果,结果很是让我震惊:

IE看PNG图片的乱码

还以为是图片出了什么问题了呢,但在Mozilla中看还是正常啊,看着那其实比较有规则的图片中的“白花”,我觉得这是IE的问题,也许使用HyperSnap截的图格式不是十分标准?也许压缩的时候出了点问题?于是我用GIMP把图片文件打开,不用做任何修改,直接保存一下,在IE下就显示正常了。

使用GIMP打开并保存一下就不乱码了

PS: 一般Windows窗口的截图,PNG格式都会比JPG格式要小,尤其是颜色比较规则、只有简单图形和文字的画面。

Update @ 2008-08-30

IE6下PNG透明的问题终于有了变通的解决方案────在背景中放个透明的gif文件,虽然有些文不对题,还是记在这里好了:Unit PNG Fix & IE PNG Fix – 解决IE6下PNG透明问题

PNG图片压缩工具

听人说,PNG图片文件格式要比GIF好,同时它又是一个开放的文件格式(有空的时候查查其详细情况),因此我尽量使用PNG格式图片,在多数情况下甚至用它替代JPG,PNG好像采用的是无损压缩格式,但不得不说的是,PNG文件格式通常都比较大,一个1024分辨率的游戏图像截图,动辄几百K,大的甚至上M,上传到Flickr很费空间啊,于是我上网找到了两个开源的PNG优化软件(好像也是免费的:))。

Pngcrush – 好像有年头的软件了,最新的下载是2001年6月的。由于下面有更好的,就没有下载了。

OptiPNG 0.4.8 (released 10 May 2005) – 这个看起来新得多,下载试用了一下,感觉不错,使用最大压缩比的话(-o7),把一个34k的1024分辨率Windows界面截图压缩到了27k,把一个996k的1024分辨率游戏截图压缩到了565k,就是压缩的速度确实有点慢,一个图片要处理半分钟左右。

PNGOut – 是一个个人的作品,它使用了和OptiPNG不同的算法,以达到比OptiPNG更高的压缩效果,经过试验,它的压缩速度比OptiPNG还要慢,但压缩比也不稳定,刚才34k的文件它压缩到了18k,而996k的文件却只压缩到了804k,个人感觉仍需改进。在它作者的说明中,也明确说明了它尤其适用与Web开发中的图片,看来对游戏截图的处理确实有点欠缺。PNGOut多了一个可以将其它图片格式转换为PNG的功能。

由于PNG格式和JPG格式相比,采用的是无损压缩,所以,如果文件大小差不了多少,我决定采用PNG替代JPG了,因为每次选择JPG的压缩比都很伤脑筋,呵呵。

这里还有关于PNG和GIF对比的详细信息,文中也提到了几个压缩工具的对比等等。

题外话:PNGOut的使用说明中,有一点让我复习了一下DOS中for的用法(它好像不支持在参数中使用通配符,所以只能借助for)。

>for %i in (*.gif) do pngout %i /kp <- convert all GIFs in dir to PNG

update @ 2007-01-09 OptiPNG的网址现在变为http://optipng.sourceforge.net/了,最新版本为0.5.4。

参考