Webナントカ

╭( ・ㅂ・)و ̑̑ グッ !

NakamyにPNGの圧縮処理を入れた

iPhoneのホーム画面のスクリーンショットは1MB ~ 2MB程度の容量があり、すぐにS3を圧迫してしまう懸念と、ホーム画面一覧の表示速度が遅いので、圧縮処理を入れた。

アップロードには、carrierwaveを使っているのでcarrierwaveの処理内に圧縮処理を追加した。PNGの圧縮処理にはpietを用いた。

圧縮のアルゴリズムとして、optipngとpngquantが選べる。optipngは可逆圧縮で、画像の劣化はないが、1MB => 700KBぐらいの圧縮率。さらに処理時間が最速のオプションを選択しても、少し長い。対して、pngquantは非可逆圧縮で画像は劣化するが、1MB => 200KBぐらいの圧縮率で、処理時間も短い。TinyPNGなどでも使用されている。

画像解析用に可逆圧縮バージョンも残しておこうと思ったのだが、そもそもiTunes Search APIで取れるApp Store上のアプリの画像とホーム画面のスクリーンショットを撮った時の各アプリの解像度が違ったので、潔くpngquantで圧縮することにした。

書き加えたのは下記。

# Gemfile

gem 'piet'
gem 'piet-binary'
# app/uploaders/image_uploader.rb

include Piet::CarrierWaveExtension
process :custom_optimize

def custom_optimize
  pngquant
end

あと、ansibleに下記を加えて、EC2の環境を整えた。

# main.yml

- yum: name=pngquant state=latest enablerepo=epel

そのうち、新しいホーム画面がアップロードされていくと、ホーム画面一覧画面の速度が改善されるはず。