BLOGTIMES
2014/07/16

mozjpeg v2.0 がリリースされたのでビルドしてみた

  encoder 
このエントリーをはてなブックマークに追加

Mozilla がリリースしている mozjpeg という JPEG エンコーダーの v2.0 が公開されました。
これを使うと JPEG ファイルを最適化してファイル容量を削減することができます。

MozillaがJPEGエンコーダー最新版「mozjpeg 2.0」をリリース、Facebookが同技術をテストへ | SourceForge.JP Magazine

Mozillaは7月15日、オープンソースのJPEGエンコーダー「mozjpeg 2.0」をリリースした。圧縮効率の改善により画像のファイルサイズを5%削減できるという。米Facebookがmozjpeg 2.0をFacebook.com上でテストすることも明らかにしている。
mozjpegはMozillaが2014年3月に発表したプロジェクト。新たに静止画フォーマットを開発するのではなく、広く利用されているJPEGの問題とされている圧縮効率を改善するためにスタートしたもので、既存のエンコーダーとの互換性を維持しつつ、JPEGファイルの圧縮改善を目指す。

以前ビルドしようとしたらうまくいかなかったので、再挑戦してみました。
左が圧縮前の画像(約745kB)、右が圧縮後の画像(約623kB)になっています。容量は約16%小さくなりました
オリジナル - mozjpeg v2.0 がリリースされたのでビルドしてみたmozjpeg 圧縮後 - mozjpeg v2.0 がリリースされたのでビルドしてみた

以下、ビルド時のメモ。

CentOS 5 上でのビルドの準備

ビルドにはこれらのプログラムがインストール済みである必要があります。

  • autoconf 2.56 or later
  • automake 1.7 or later
  • libtool 1.4 or later
  • NASM (if building x86 or x86-64 SIMD extensions)
  • GCC v4.1 or later recommended for best performance

基本的には yum で入るもので十分ですが、nasm については http://www.nasm.us/pub/nasm/releasebuilds/ から最新版の 2.11 をビルドしてインストールしました。

ビルド方法

GitHub からソースをダウンロードしてビルドします。

wget https://github.com/mozilla/mozjpeg/archive/v2.0.tar.gz -O mozjpeg-2.0.tar.gz tar zxvf mozjpeg-2.0.tar.gz cd mozjpeg-2.0 # ここで ./configure.ac を編集 autoreconf -fiv mkdir build && cd build sh ../configure --host i686-pc-linux-gnu CFLAGS='-O3 -m32' LDFLAGS=-m32 # ここで ./build/simd/Makefile を編集 make

途中で2カ所ファイルの編集が入っているのは、デフォルトではビルドがこけてしまうからです。
まず、最初の configure.ac については AM_PROG_AR 関連のエラーが出てしまうので「automake 1.12 and AM_PROG_AR」を参考に下記のようにスクリプトに1行追加を行います。

$ diff -u ./configure.ac{.org,} --- ./configure.ac.org 2014-07-16 22:26:21.000000000 +0900 +++ ./configure.ac 2014-07-16 22:32:35.000000000 +0900 @@ -20,6 +20,7 @@ AM_PROG_CC_C_O AM_PROG_AS AC_PROG_INSTALL +m4_pattern_allow([AM_PROG_AR]) AM_PROG_AR AC_PROG_LIBTOOL AC_PROG_LN_S

次の Makefile は libtool のエラーを回避するために --tag=CC を入れています。
これで綺麗にビルドすることができます。

$ diff -u ./build/simd/Makefile{.org,} --- ./build/simd/Makefile.org 2014-07-16 22:38:39.000000000 +0900 +++ ./build/simd/Makefile 2014-07-16 22:42:25.000000000 +0900 @@ -107,7 +107,7 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) -LTCCASCOMPILE = $(LIBTOOL) --mode=compile $(CCAS) $(AM_CCASFLAGS) \ +LTCCASCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CCAS) $(AM_CCASFLAGS) \ $(CCASFLAGS) COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -587,7 +587,7 @@ jdmerss2.lo: jdmrgss2.asm .asm.lo: - $(AM_V_GEN) $(LIBTOOL) $(AM_V_lt) --mode=compile $(srcdir)/nasm_lt.sh $(AM_V_lt) $(NASM) $(NAFLAGS) -I$(srcdir) -I. $< -o $@ + $(AM_V_GEN) $(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(srcdir)/nasm_lt.sh $(AM_V_lt) $(NASM) $(NAFLAGS) -I$(srcdir) -I. $< -o $@ jsimdcfg.inc: $(srcdir)/jsimdcfg.inc.h ../jpeglib.h ../jconfig.h ../jmorecfg.h $(AM_V_GEN) $(CPP) -I$(top_builddir) -I$(top_builddir)/simd $(srcdir)/jsimdcfg.inc.h | $(EGREP) "^[\;%]|^\ %" | sed 's%_cpp_protection_%%' | sed 's@% define@%define@g' > $@

実際にファイルの変換を行う

JPEG の最適化を行うには cjpeg を使って下記のように行えばいいみたいです。

./cjpeg -quality 100 -outfile 20131103-D600_021108_mozjpeg.JPG 20131103-D600_021108.JPG

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/6868
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン