それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

サムネイルの生成を超高速にするオプション -define

imagemagick の画像縮小を超速にする記事を読んだので試してみた

blog.mirakui.com

-define をつけると早くなる。

いつもの convert に「-define jpeg:size=...」をつけるだけで10倍速くなる

まじか。早くなるならやってみるぞ

測定しました。

-define あり

takuya@~/Desktop$ time for i in {1..100}; do  convert -define jpeg:size=800x600 IMG_2592.jpg out.jpg ; done

real    0m6.588s
user    0m5.199s
sys 0m1.061s

通常の -resize

takuya@~/Desktop$ time for i in {1..100}; do  convert -resize 800x600 IMG_2592.jpg out.jpg ; done

real    0m59.158s
user    0m49.801s
sys 0m8.475s

オプション違いの比較

| 時間 | -define | -resize | 率 | | 100回 | 0m6.588s | 0m59.158s | 約 9 倍 | | 10回 | 0m0.647s | 0m6.335s | 約10 倍 |

バイくらい早い。

測定環境

f:id:takuya_1st:20160922231015j:plain:w200

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro11,1
      Processor Name: Intel Core i5
      Processor Speed: 2.4 GHz
      Number of Processors: 1
      Total Number of Cores: 2
      L2 Cache (per Core): 256 KB
      L3 Cache: 3 MB
      Memory: 8 GB
      Boot ROM Version: MBP111.0138.B17
      SMC Version (system): 2.16f68

ただちょっとわからないのが・・・サイズ

800x600 で指定したはずなのに、出力は816x612になってるんだよねぇ。

IMG_2592.jpg JPEG 3264x2448 3264x2448+0+0 8-bit sRGB 966KB 0.000u 0:00.000
defined_out.jpg JPEG 816x612 816x612+0+0 8-bit sRGB 117KB 0.000u 0:00.000
resized_out.jpg JPEG 800x600 800x600+0+0 8-bit sRGB 111KB 0.000u 0:00.000

ImageMagickで利用しているJPEGライブラリのlibjpegでは、1/2、1/4、1/8のサイズへの縮小は高速に計算できるのです。

つまり、元サイズが3264x2448なので、1/4 が適用されているわけですね。

なので、-define したときは、1/2,/1/4 の近いサイズが採用されるようですね。

実験画像

f:id:takuya_1st:20160922233221j:plain:w300

上に書いたように、1/4 になってるので 800x600と816x612 になってるので若干サイズが違うね。

参考資料

本当は速いImageMagick: サムネイル画像生成を10倍速くする方法 - 昼メシ物語