图片优化第三部分: 4 步减小文件大小
注: 原文地址是 http://yuiblog.com/blog/2008/11/14/imageopt-3/
这篇文章是一些你可以用来减小你的图片文件大小的普通工具。 想法是让你可以把你的设计师刚创建好的图片拿过来, 不用花费精力, 甚至都不用看, 就可以把他们整小, 并且跟原来一样。
这个过程的好消息是:
无损的 – 你去除了字节, 所以你的一些信息丢失了, 不过不是像素信息, 你的结果图片也看起来跟源图片一样, 没有质量的损失。
使用免费的工具 – 所有的我们提到的工具都是免费的, 开源的, 都可以再windows和unix 上使用
自动化的 – 因为这些都是命令行工具, 所以他们都很容易编成自动化脚本; 一个自动化的例子就是 smush.it 工具.
第一步:压缩PNG
PNG 把图片的信息存贮在所谓的”块“里面, 不是所有的块都是在显示图片的时候必须的。 事实上, 大部分都不是, 你可以使用类似 pngcrush 这样的工具安全的把所有不需要的块移除掉. 例:
> pngcrush -rem alla -brute -reduce src.png dest.png
我们来看看这个命令的选项:
- src.png 是源图片, dest.png 是目标图片
- -rem all 意思是删除透明块之外所有的块
- -reduce 试图减少调色板中的颜色假如可能的话
- -brute 试图使用默认10种之外的100 多种不同的方法优化图片。 这是很慢,的过程, 并且不会有大的改进。但是你只是在”线下做这个过程, 能赢得文件大小,一两秒甚至更多都不重要了。在一些性能敏感的场景把这个选项移除
用这个命令跑Alexa上排名前十的网站上的PNG突破, 我们平均减小16.05%的文件大小。这意味着你很简单的就给你的PNG图片减肥了, 节省了带宽和磁盘空间, 也改进了加载时间, 而不用牺牲图片质量, 甚至都不用更改任何一行程序代码。
PNGcrush 是这类优化的唯一的工具. 别的你可以看看的工具有:
现在我们有很好的PNG 解决方案了, 我们来看看我们是不是能对别的图片类型做一样的事情。
第二步: 移除JPG 元数据
JPEG 文件保护的元数据有:
- 评论
- 程序(比如photoshop)的元数据
- EXIF信息比如相机信息, 照像时间, 甚至真实图片的缩略图或者音频
这些元数据都不是显示图片必须的, 是可以安全的删除而不损失图片质量。 在前面的讨论中说道, JPEG 是有损格式, 这就意味着你的每次保存都会有质量丢失。 但是幸运的是一些操作不是有损的, 操作比如删除图片的一部分, 旋转, 和拷贝个人爱好元数据。一个允许你做这些的工具叫做 jpegtran.
这个命令是拷贝一个原图片, 优化并不把任何元数据拷贝到新的图片备份:
> jpegtran -copy none -optimize src.jpg dest.jpg
注意这依赖于你用的版本, 可能你需要用到这样结尾的语法:
src.jpg> dest.jpg
这个 -optimize 选项让jpegtran 优化哈夫曼树并改进压缩。
在Alexa 前10 的站点跑这个命令平均节省11.85%.
使用jpegtran的 -progressive 选项, 你可以进一步优化你的图片大小。它让jpeg 图片在浏览器中渐进式的加载。从第低质量版本的图片逐步改进到所有信息都到达。
元信息剔除的重要提示: 只是对你自己的图片做。 因为当jpegtran 删除所有元信息的时候, 它也会把图片中的版权信息删除。
第三步: GIF 转为 PNG
最好的优化GIF图片的方法是什么? 把它转换成PNG . 挺起来很搞笑, 不过这是真的。 大部分时间你会从PNG得到比较小的文件大小和相同质量并且浏览器支持, 跟之前的文章里我们讨论的一样。注意到PNG 并不总是比较小的, 但是大部分时间是的, 所以还是值得检查转换的, 在两个文件中挑一个比较小的。
为了可以自动化转换你的图片, 你可以使用 ImageMagick的转换:
> convert image.gif image.png
假如你想强制使用PNG8 的话可以用:
> convert image.gif PNG8:image.png
这个可能不是必须的, 因为GIF 很有可能被转换成PNG8 , ImageMagick 会根据颜色数来挑选合适的文件格式。
当你把图片从GIF 转换为PNG , 别忘记用第一步的工具缩小一下PNG 结果。
假如前10 的网站把所有他们的GIF 转为PNG (排查那些不产生更小的文件大小的), 平均可以有20.4% 的文件大小缩减。 唯一的不方便就是要你写一个查找替换脚本,把所有的GIF 引用替换成新的PNG 版本。
优化GIF 动画
现在所有的GIF, PNG 图片都压缩了, JPEG也是, 还剩下什么呢?GIF动画。 你可以用的一个工具是GIFsicle . 因为动画是由帧组成的, 并且图片的一些部分在帧改变的时候不会变化, GIFsicle 不会携带重复的像素信息。 这样用:
> gifsicle -O2 src.gif > dest.gif
压缩它
就跟我们在开始说的一样, 这四步最赞的地方是他们不会导致图片质量损失, 所以你不用工具比较优化前后。 它们都是命令行的工具, 所以它们很容易自动化。 所以在用ftp 上传文件到服务器之前, 你不会丢失任何信息, 你只是赢了。
你可以尝试 smush.it工具,看一下你可能节省多少。





