Google PageSpeed Insights*1で、自作のRails製Webサービスの短歌投稿サイトUtakataを調べていたら、「適切なサイズの画像」という項目に引っかかった。詳細を見てみると、アイコンに使われているJPEG画像のサイズが、数KB〜数100KBまで妙に差があることが原因のようだ。
Exifとは、デジタルカメラで撮影した画像データに、撮影条件に関する情報(メタデータ)を追加して保存できる、画像ファイル形式の規格のことである。
同じ大きさの画像なのにファイルサイズが大きく異なるのは、Exifというメタ情報がJPEG画像に保存されていることによるらしい。
Ver Exif online , quitar Exif online
試しに上のWebツールでExif情報を除去してみたら、確かにファイルサイズが減った。
Rails + PaperclipでアップされるJPEG画像のExif情報を除去する
UtakataはRails向け画像アップロードライブラリのPaperclipを利用しているので、まずは今後アップされる画像についてはExif情報を除去して保存されるように設定する。
これは上のように、convert_options: { all: '-strip' }
を追加するだけでOKだった。
S3のJPEG画像のExif情報を削除して更新する
これで新規にアップされる画像についてはExif情報が除去されるけれど、既にS3にアップされているJPEG画像のExif情報を除去する必要がある。
S3の画像を一括でダウンロードする
S3はWebの画面上の操作で画像を一括でダウンロードできないけれど、AWS CLI(コマンドラインインターフェース)を使えば一括でダウンロード/アップロードできることが分かった。
$ brew install awscli
AWS CLIを使うのは初めてだったので、まずはインストールする。
$ aws configure
を実行すると、AWSアクセスキー、シークレットアクセスキー、リージョン情報、Default output format*2の4項目が聞かれるで、それぞれ入力する。
そこまで出来たら、
$ aws s3 cp s3://utakata/ ./utakata --recursive
このコマンドでS3にアップされている内容をそのまま全部ダウンロードする。
Exif情報を一括で除去する
$ find ./utakata/ | grep ".jpe\?g$" | xargs -t -n 10 -P 4 mogrify -strip
S3に画像を一括でアップロードする
最後に、
$ aws s3 cp ./utakata s3://utakata/ --recursive
このコマンドで一括アップロードしたら、Exif情報が除去された状態ですべての画像が更新されて目的を達成することができた。
PageSpeed Insightsのスコアも94点まで出るようになって良い感じだ。