【jpegtran】 jpeg画像圧縮 


google adsenseにて「ページの読み込み時間のパフォーマンス 」で文句言われてたので修正。
今回はPageSpeed Insightsの「画像を最適化する」にてひっかかっていたので画像を圧縮することに。

Optimize Images」にてgoogleのおすすめするツールはこちら↓
jpegの場合 jpegtran or jpegoptim
pngの場合 OptiPNG or PNGOUT

私のサイトはjpegばかりだったのでjpegtranを使用しました。
CentOS6.3にはjpegtranがデフォルトで入っていました。
入っていない場合は「yum -y install libjpeg」でインストールできるそうです。(試してません)

早速上書きしてみよう!
でもこのコマンド打たないで!ファイルが空になってしまうことがあるよ
# jpegtran -copy none -optimize -outfile foo.jpg foo.jpg

オプションの内容

-copy none
JPEG ファイルのメタデータをすべて削除する。
-optimize
ハフマンテーブルを最適化する。
-outfile
出力するファイル名

しかしここで問題が!
Empty input file」というメッセージとともにファイルが空になってしまった!
このコマンドで上書きできるって言ってた人がいたのになぁ・・・。

んで調べた結果ディレクトリを指定して複数画像をいっぺんに圧縮するシェルを作っている人がいて
中身をみたらいったん別名で保存してから上書きしていたので使わせて頂きました。

こちらが情報元↓
http://stackoverflow.com/questions/5579183/jpegtran-optimize-without-changing-filenamehttp://stackoverflow.com/questions/5579183/jpegtran-optimize-without-changing-filename

シェルの中身はこんな感じ。

#! /bin/sh

EXTENSIONS="jpe?g"

if [ -z "$1" ]; then
    DIR="`pwd`"
else
    DIR="$1"
fi

# Optimize JPEG images
find $DIR -regextype posix-egrep -regex ".*\.($EXTENSIONS)\$" -type f | xargs -I{} jpegtran -optimize -progressive -outfile "{}.optimized" "{}"

# Rename xxx.jpg.optimized -> xxx.jpg
for file in $(find $DIR -name '*.optimized'); do
    chown $(stat -c "%U:%G" "${file%.optimized}") "$file"
    chmod $(stat -c "%a" "${file%.optimized}") "$file"
    mv -f "$file" "${file%.optimized}";
done

これを「optimize-images.sh」とかで保存して、ディレクトリ名を指定して実行すると複数画像をいっぺんに圧縮できました。
上記ですとjpgまたはjpegの拡張子が対象になるのですが、私の環境ではJPGだったので、EXTENSIONS=”jpe?g”をEXTENSIONS=”JPG”にしました。

# vi optimize-images.sh
# chmod +x optimize-images.sh
# ./optimize-images.sh ./images

これでPageSpeed Insightsで文句言われなくなりました。

2 comments for “【jpegtran】 jpeg画像圧縮 

  1. YOSUKE
    2013年10月24日 at 10:41 AM

    よくブログ読ませて頂いてます。
    僕もapproadさんみたいにrailsが書けたらいいのに〜なんて思ってます(笑)
    今は半年以内にrailsによるサイトを立ちあげようと、準備をしています。
    次の記事も楽しみにしています\(^o^)/

    • approad
      2013年11月14日 at 1:03 PM

      コメントありがとうございます!
      返信遅くなってすみません!
      スパムコメントが100件くらい来ていて見逃していました(>人<)

      まだまだ私も勉強中の身ですがRailsはいいですよ☆
      Javaとかに戻れなくなります。
      仕事上戻らないといけないんですけどね(;´Д`)

      更新頻度は低いし参考にならない記事も多いと思いますが宜しくお願いいたします< (_ _)>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です