I'm looking for the fastest command-line image converter for Linux which can read a JPEG image, scale it down to at most 1366x768, and write a quality 50 JPEG image. Something like this, but much faster than ImageMagick:
$ convert -resize x768 -quality 50 foo42.jpg foo42.th.jpg
# takes 0m16.713s for my test image setI've also tried this:
$ <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 ImageMagickSo I'd like to have a program, preferably written in C, which integrates djpeg, a higher quality version of pnmscale, and cjpeg.
I've just found swiggle (a C program using libjpeg), I've disabled some of it's functionality I don't need in the source code, and I've got:
$ swiggle -f -H 768 .
# takes 0m11.378s for my test image set, yields high quality resultsDo you have another suggestion? I guess most image converters use libjpeg, so it would be hard to get much faster results than swiggle.
32 Answers
The fastest library I've used so far is definitely EPEG. It can only create thumbs from JPG files, but it creates them very fast:
$ identify worldmap.jpg
worldmap.jpg JPEG 6400x3200 6400x3200+0+0 DirectClass 8-bit 6.85727mb 0.840u 0:02Imagemagick:
$ time convert -resize 1536x768 -quality 50 worldmap.jpg im_thumb.jpg
# 2.93s user 0.23s system 85% cpu 3.718 totalEPEG:
$ time epeg -w 1536 -h 768 -q 50 worldmap.jpg epeg_thumb.jpg
# 0.31s user 0.01s system 79% cpu 0.404 totalI used this library to create thumbs for a vast amount of really large images.
2I've solved this problem by downloading swiggle (a command-line JPEG thumbnail + HTML image gallery generator), and modifying its source for my needs. See the speed measurements in the question (less than 10% faster than djpeg+pnmscale+cjpeg).