使用VIPS命令行将图像切割成图块

时间:2012-06-01 15:26:00

标签: image-processing imagemagick

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

过去我曾经像我这样使用过ImageMagick:

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

但最近这种情况并没有奏效,流程耗尽了内存等等。

VIPS中是否有类似的命令?我知道有一个CLI,但我在文档中找不到示例或有用的解释,我仍然试图弄清楚nip2 GUI的事情。任何帮助赞赏。 :)

2 个答案:

答案 0 :(得分:6)

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

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

这是DeepZoom编写者制作tif瓷砖的深度1金字塔。在outdir_files/0中查找输出图块。有chapter in the docs讨论如何使用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 1 --tile-size 512 --overlap 0 --suffix .tif
real    0m1.643s
user    0m1.668s
sys     0m1.000s

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

答案 1 :(得分: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裁剪相同......