JPEG画像を読み取り、最大1366x768に縮小し、高品質の50JPEG画像を書き込むことができるLinux用の最速のコマンドライン画像コンバーターを探しています。このようなものですが、ImageMagickよりもはるかに高速です:
$ convert -resize x768 -quality 50 foo42.jpg foo42.th.jpg
# takes 0m16.713s for my test image set
私もこれを試しました:
$ <foo42.jpg djpeg | pnmscale -xysize 1366 768 | cjpeg -quality 50 >foo42.th.jpg
# takes 0m12.007s for my test image set, and has lower visual quality than ImageMagick
そこで、pnmscaleの高品質バージョンであるdjpegとcjpegを統合した、できればCで記述されたプログラムが欲しいのです。
swiggle (libjpegを使用するCプログラム)を見つけました。ソースコードで必要のない機能の一部を無効にしました。次のようになりました。
$ swiggle -f -H 768 .
# takes 0m11.378s for my test image set, yields high quality results
別の提案がありますか?ほとんどの画像コンバーターはlibjpegを使用していると思うので、小刻みに動くよりもはるかに速い結果を得るのは難しいでしょう。
swiggle (コマンドラインJPEGサムネイル+ HTML画像ギャラリージェネレーター)をダウンロードし、必要に応じてソースを変更することで、この問題を解決しました。質問の速度測定値を参照してください(djpeg + pnmscale + cjpegより10%未満高速)。
私がこれまでに使用した最速のライブラリは間違いなく [〜#〜] epeg [〜#〜] です。 JPGファイルからのみ親指を作成できますが、非常に高速に作成されます。
$ identify worldmap.jpg
worldmap.jpg JPEG 6400x3200 6400x3200+0+0 DirectClass 8-bit 6.85727mb 0.840u 0:02
Imagemagick:
$ time convert -resize 1536x768 -quality 50 worldmap.jpg im_thumb.jpg
# 2.93s user 0.23s system 85% cpu 3.718 total
EPEG:
$ time epeg -w 1536 -h 768 -q 50 worldmap.jpg epeg_thumb.jpg
# 0.31s user 0.01s system 79% cpu 0.404 total
私はこのライブラリを使用して、膨大な量の本当に大きな画像の親指を作成しました。