pyvips 可以处理巨大的图像quickly and in little memory。它是 LGPL,可在 Linux、macOS 和 Windows 上运行,并且适用于 Python 的每个版本。大多数 linux(包括 Ubuntu)在包管理器中都有它。
这是一个需求驱动的流式图像处理库。它不是在单个巨大的块中处理图像,而是在您背后构建一个图像处理操作员网络,并且根据创建输出的需要,像素在小区域中通过您的计算机内存拉出。
例如,我可以运行这个程序:
import sys
import pyvips
# access='sequential' puts pyvips into streaming mode for this image
im = pyvips.Image.new_from_file(sys.argv[1], access='sequential')
im = im.crop(100, 100, im.width - 200, im.height - 200)
# 10% shrink, lanczos3 (by default)
im = im.resize(0.9)
mask = pyvips.Image.new_from_array([[-1, -1, -1],
[-1, 16, -1],
[-1, -1, -1]], scale=8)
# integer convolution ... you can use large float masks too, canny,
# sobel, etc. etc.
im = im.conv(mask, precision='integer')
im.write_to_file(sys.argv[2])
在 40k x 30k 像素的 GeoTIFF 图像上:
$ vipsheader SAV_X5S_transparent_mosaic_group1.tif
SAV_X5S_transparent_mosaic_group1.tif: 42106x29852 uchar, 4 bands, srgb, tiffload
在这台 2015 年的笔记本电脑上运行如下:
$ /usr/bin/time -f %M:%e python3 bench.py SAV_X5S_transparent_mosaic_group1.tif x.tif
257012:101.43
即。 260mb 的内存,101 秒的运行时间。在您的大型机器上应该会快一些。
您可能遇到的一个问题是 GeoTIFF 标签:它们不会被 pyvips 保存。也许您在以后的处理中不需要它们。