imagemagick の画像縮小を超速にする記事を読んだので試してみた
-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 倍 |
ヤバイくらい早い。
測定環境
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 の近いサイズが採用されるようですね。
実験画像
上に書いたように、1/4 になってるので 800x600と816x612 になってるので若干サイズが違うね。