在Python中调整大图像的大小(大于可用RAM)



我想调整大小并将其拆分为256x256像素的图块(Zoomify/OSM/Google Maps/XYZ模式(。图像将采用 BigTIFF 或 PSB(大文档格式或 Photoshop 大(格式。

有哪些可用的库可以做到这一点?我正在查看GDAL,但它产生的输出非常模糊,我无法将其设置为更好地插值。理想情况下,我会为此类任务寻找 Lanczos 插值器。

是否有任何本机 Python 库或基于 C 的库的包装器可以做到这一点?imagemagick的Python包装器可以做这样的事情吗?

如果没有可用的 Python 库,我也开放基于命令行的工具,我可以使用 Python 自动执行这些工具。

libvips可以有效地处理巨大的(大于RAM(图像。它是一个流式图像处理库,因此它可以(在这种情况下(同时解压缩、调整大小、平铺和写入所有内容,而无需将整个图像保存在内存中或需要任何临时文件。

dzsave运算符将编写一个DeepZoom/Zoomify/Google Maps金字塔。您可以从命令行运行它,如下所示:

$ vipsheader y.tif
y.tif: 104341x105144 uchar, 3 bands, srgb, tiffload
$ ls -l y.tif
-rw-r--r-- 1 john john 32912503796 Jun 13 13:31 y.tif
$ time vips dzsave y.tif x
real    3m4.944s
user    9m21.372s
sys 7m20.232s
peak RES: 640mb
$ ls -R x_files/ | wc
 227190  227172 2784853

因此,在我的桌面上,它在大约 3 分钟内将 32GB 图像转换为 230,000 个图块。这是使用机械硬盘,使用SSD可能会更快。文档中有一章介绍了 dzsave。

它有一个 Python 绑定,所以你也可以写:

import pyvips
image = pyvips.Image.new_from_file("y.tif", access="sequential")
image.dzsave("x")

access选项告诉libvips它应该流式传输图像。它可以读取BigTIFF和PSB。你会发现BigTIFF要快得多,需要的内存要少得多。

最新更新