Google best-practices 上建议对JPEG和PNG文件进行lossless compression,尽可能的减小图片大小

上传图片,对于是再寻常不过的需求了,之前的项目说实话并不太注重图片,上传时候只是限制最大的width & height, 并没有进行压缩,最近老外总提这事,只好做了

具体做法:

1、由于使用piet进行无损压缩,需要事先安装好 optipngjpegoptim, 这两个包是用来对png和jpg图片进行压缩的主力,piet则是在此基础上封装出的ruby套件.

ubuntu:

sudo apt-get install optipng jpegoptim

centos: 比较麻烦,请看下面两篇文章:

   Centos 6.2 安装optipng

   Centos 6.2 安装  jpegoptim

2、之前上传使用的是carrierwave, 这次添加无损压缩使用的是 piet

# 文件和图片处理
gem 'carrierwave'
gem 'mini_magick'
# 无损压缩
gem 'piet'

3、修改 carrierwave uploader

# encoding: utf-8
class ImageUploader < CarrierWave::Uploader::Base
         
  include CarrierWave::MiniMagick
  include CarrierWave::MimeTypes
  include Piet::CarrierWaveExtension
           
  process :optimize
         
  # xxxxxxx
         
end

4、结果

发布后,经测试 同一个jpg图片,之前上传后的大小是38KB, 无损压缩之后的大小为8KB, 效果还是比较明显的,节省掉带宽,就相当于省下钱了,这么想想,还是很值得的。


对于没有用过carrierwave的开发者,可以去以下地址浏览 http://railscasts-china.com/episodes/9-file-uploading-by-carrierwave