我正在寻找最快的 Linux 命令行图像转换器,它可以读取 JPEG 图像,将其缩小到最多 1366x768,并写入质量为 50 的 JPEG 图像。类似这样,但比 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
所以我想要一个程序,最好是用 C 编写的,它集成了 djpeg、pnmscale 的更高质量版本和 cjpeg。
我刚刚发现摆动(一个使用 libjpeg 的 C 程序),我在源代码中禁用了一些我不需要的功能,并且我得到:
$ swiggle -f -H 768 .
# takes 0m11.378s for my test image set, yields high quality results
您还有其他建议吗?我猜大多数图像转换器都使用 libjpeg,因此很难获得比 swiggle 更快的结果。
答案1
到目前为止我用过的最快的库肯定是电力电子工程学会。它只能从 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
我使用这个库为大量真的大图像。
答案2
我已经通过下载解决了这个问题摆动(命令行 JPEG 缩略图 + HTML 图库生成器),并根据我的需要修改其源代码。请参阅问题中的速度测量(比 djpeg+pnmscale+cjpeg 快不到 10%)。