我正在寻找命令行图像转换器/缩放器。
我需要做的是将位图和tiff文件转换为png文件以及创建缩略图。图像比较大。最大的是大约13,000 x 10,000像素,大约200mb。
我尝试过ImageMagick。它使用了太多内存,速度太慢,无法使用光盘缓存而无法处理最大的文件,使其速度极慢。
目前我使用的是使用较少内存且可以处理较大文件的GraphicsMagick,但它仍然有点慢。每张图片大约15秒。
是否还有其他可能提供更好性能的程序?
答案 0 :(得分:1)
您可以尝试libvips。它是一个流式图像处理库,因此它能够读取输入,处理和将输出写为单个管道,没有单独的加载阶段,也没有临时文件。它也有一个花哨的线程IO系统,所以performance is good and memory use is low。
我在这台机器上计时(想象一下ImageMagick 6.9.6-3 Q16,gm 1.3.25,vips 8.4.2):
$ vips black test.tif 13000 10000 --bands 3
$ ls -l test.tif
-rw-r--r-- 1 john staff 390000854 22 Nov 09:43 test.tif
这是一个13000 x 10000 3波段,8比特未压缩的TIFF。使用vipsthumbnail,vips附带的图像缩小器,我看到了:
$ /usr/bin/time -l vipsthumbnail test.tif -s 128x128 -o small.png
0.54 real 0.42 user 0.11 sys
77635584 maximum resident set size
我跑了三次并选择了最快的,所以这应该是vipsthumbnail
而不是我的磁盘系统的测试。实时为0.54秒,峰值内存为77MB。
convert
我看到了:
$ /usr/bin/time -l convert test.tif -resize 128x128 small.png
4.87 real 4.28 user 0.55 sys
1432182784 maximum resident set size
同样,三次运行中最快,4.87s实时,1.4gb内存。我看,GraphicsMagick的速度要快一点:
$ /usr/bin/time -l gm convert test.tif -resize 128x128 small.png
3.95 real 3.41 user 0.51 sys
1264369664 maximum resident set size
3.95s真实,1.2gb峰值内存。
在此测试中,因此libvips的速度提高了7倍,并且使用的内存比graphicsmagick少15倍。
libvips是大多数linux的标准组成部分,它位于自制软件和macports中,而vips网站上有64位Windows二进制文件。
答案 1 :(得分:0)
有很多图像处理软件可以从您的任何选择转换为您想要的输出格式,只需下载这个漂亮的软件
答案 2 :(得分:0)
使用ImageMagick或GraphicsMagick,您可以使用较低的“质量”而不是接受默认质量== 75来加速PNG编码。这将交换压缩性能(文件大小)以提高速度。尝试-quality 40
用于艺术线条,或-quality 41
用于拍摄照片。以下是使用libpng-1.2.54构建的ImageMagick-7.0.3-8从相机中获取JPEG的一些结果:
glenn.rp> time magick D*88.JPG d88-q75.png
real 0m13.494s user 0m11.252s sys 0m2.060s
glenn.rp> time magick -quality 41 D*88.JPG d88-q41.png
real 0m7.377s user 0m4.728s sys 0m1.908s
glenn.rp> time magick -quality 40 D*88.JPG d88-q40.png
real 0m3.842s user 0m3.200s sys 0m0.584s
glenn.rp> ls -lt d88*
-rw-rw-r-- 1 glennrp glennrp 24352041 Nov 29 15:45 d88-q40.png
-rw-rw-r-- 1 glennrp glennrp 17072518 Nov 29 15:45 d88-q41.png
-rw-rw-r-- 1 glennrp glennrp 15788794 Nov 29 15:44 d88-q75.png