2011-07-02 29 views
6

私はレールにクリップをセットしていて、すべてがhunky-doryを使っています。Railsペーパークリップの画像圧縮とページスピードの比較

Page Speedは、サムネイルと大きな画像(ペーパークリップが生成するもの)を無損失で圧縮できることを知っています。これを行う私のモデルに入れることができるオプションはありますか?私はmod_deflateが画像を圧縮しないことに気付きました(私はFirefoxを使用しています)。

答えて

10

paperclip-compression gemを使用して、ペーパークリップ処理に圧縮を追加できます。あなたのGemfileに

gem "paperclip-compression", "~> 0.1.1" 

(もちろん走行バンドルをインストール)

あなたのモデルで:

has_attached_file :avatar, 
       :styles  => { :medium => "300x300>", :thumb => "100x100>" }, 
       :processors => [:thumbnail, :compression] 

圧縮データを再配置することにより、「jpegtran作品(DCT係数)、画像を完全に復号化することはありません。したがって、its transformations are lossless "

注:herokuで実行している場合は、jpegtranとoptipngバイナリがアプリケーションに追加されている必要があります。ここに良い記事はrunning binaries on herokuです。

+0

これはRails 2.3で動作しますか?アプリケーションの起動に失敗しています。 – JakeTheSnake

+0

これが2.3で動作するかどうかは不明です。私は3.2でそれを使用しています。 paperclip-compression依存関係を確認してください。 – vansan

1

さまざまなJPEG圧縮レベルで独自のテストを行う必要がありますが、私はImageMagicksの画質設定を75に下げても気づくことはありませんが、ファイルサイズが約30-40%節約されています。

私のモデルは次のようになります。

has_attached_file :photo, 
    :styles => { 
     :"185x138" => { 
     :geometry => "185x138>" 
     } }, 
    :convert_options => { 
     :all => "-auto-orient", 
     :"185x138" => "-quality 75", 

-quality 75はImageMagickのためのものです。別のプロセッサを使用している場合は、それに応じて調整する必要があります。

+0

私はまだページスピードに応じて "私は可逆画像を圧縮してサイズが22%の削減を得ることができる" ことを見ています。 – JakeTheSnake

0

FFMPEGまたはAVCONVはどうですか?

sudo apt-get install ffmpeg/avconv 

=初期化子

Paperclip.options[:command_path] = "/usr/bin/" # see `which ffmpeg` 

=モーダル

after_save :compress_with_ffmpeg 

def compress_with_ffmpeg 
    [:thumb, :original, :medium].each do |type| 
    img_path = self.avtar.path(type) 
    Paperclip.run("ffmpeg", " -i #{img_path} #{img_path}") 
    end 
end