PNG不是为速度而构建的。它比 jpeg 慢,并且不小于 tif。如果您被 PNG 卡住了,那么其他优化都不会产生任何影响。
例如:
$ time vips avg wtc.tif
117.853995
real 0m0.525s
user 0m0.756s
sys 0m0.580s
$ time vips avg wtc.png
117.853995
real 0m3.622s
user 0m3.984s
sys 0m0.584s
其中“wtc”是一张 10,000 x 10,000 像素的 RGB 照片,tif 是未压缩的条形格式,而 png 也是未压缩的,两个图像都在磁盘缓存中,“avg”查找并打印平均像素值。
vips 有自己的“.v”格式,它只是一个巨大的像素缓冲区。这种格式可以与 mmap() 并行读取,并且速度更快:
$ time vips avg wtc.v
117.853995
real 0m0.162s
user 0m0.460s
sys 0m0.092s
如果您的图像可以压缩,则权衡会有所改变。例如,jpeg 通常会压缩 10 倍,因此解码速度变得比光盘速度更重要。您想使用优化的解码库,如 libturbojpeg 并一次处理多个文件。
$ time vips avg wtc.jpg
117.853995
real 0m1.413s
user 0m1.696s
sys 0m0.564s
PNG 使用 libz,对于摄影图像,压缩率不会超过 2 倍。即使在相同的压缩级别下,它也比带 deflate 的 tif 慢很多:
$ time vips avg wtc.tif
117.853995
real 0m3.154s
user 0m3.496s
sys 0m0.540s
$ time vips avg wtc.png
117.853995
real 0m4.888s
user 0m5.196s
sys 0m0.556s
$ ls -l wtc.*
-rw-r--r-- 1 john john 15150881 Feb 20 2012 wtc.jpg
-rw-rw-r-- 1 john john 135803013 May 18 12:47 wtc.png
-rw-rw-r-- 1 john john 143807446 May 18 12:53 wtc.tif
-rw-rw-r-- 1 john john 263509369 May 18 12:37 wtc.v
我想另一个因素是你的处理有多耗时。如果您正在做一些密集的事情,读取速度和解码速度将不重要。