4

我有一个大的 Tiff 图像,我想将它切成 512x512 的图块并写入磁盘。

在过去,我像这样使用 ImageMagick:

convert -crop 512x512 +repage image_in.tif image_out_%d.tif

但是最近这一直不起作用,进程内存不足等。

VIPS中是否有类似的命令?我知道有一个 CLI,但我在文档中找不到示例或有用的解释,我仍在尝试找出 nip2 GUI 的东西。任何帮助表示赞赏。:)

4

2 回答 2

10

libvips有一个操作员可以很快地为您完成这项工作。尝试:

$ vips dzsave wtc.tif outdir --depth one --tile-size 512 --overlap 0 --suffix .tif

那是 DeepZoom 作家制作深度 1 的 tif 瓷砖金字塔。查找outdir_files/0输出图块。文档中有一讨论如何使用 dzsave。

对我来说,它比 IM 快得多:

$ time convert -crop 512x512 +repage huge.tif x/image_out_%d.tif
real    0m5.623s
user    0m2.060s
sys     0m2.148s
$ time vips dzsave huge.tif x --depth one --tile-size 512 --overlap 0 --suffix .tif
real    0m1.643s
user    0m1.668s
sys     0m1.000s

huge.tif10,000 x 10,000 像素的未压缩 RGB 图像在哪里。此外,它只会在少量内存中处理任何大小的图像。

于 2013-03-08T11:38:12.870 回答
1

我遇到了同样的问题。似乎 VIPS 没有像上面的 imagemagick 那样的内置命令,但是您可以使用一些脚本(Python 代码片段)来做到这一点:

for x in xrange(0, tiles_per_row):
    xoffset = x * tile_size
    for y in xrange(0, tiles_per_row):
        yoffset = y * tile_size
        filename = "%d_%d_%d.png" % (zoom, x, y)
        command = "vips im_extract_area %s %s %d %d %d %d" % (base_image_name, filename,  xoffset, yoffset, tile_size, tile_size)
        os.system(command)

但是,您不会获得与 imagemagick 裁剪相同的速度......

于 2012-06-19T09:44:34.463 回答