我有一个很大的Tiff图像,我想切成512x512的磁贴并写入磁盘。
过去我曾经像我这样使用过ImageMagick:
convert -crop 512x512 +repage image_in.tif image_out_%d.tif
但最近这种情况并没有奏效,流程耗尽了内存等等。
VIPS中是否有类似的命令?我知道有一个CLI,但我在文档中找不到示例或有用的解释,我仍然试图弄清楚nip2 GUI的事情。任何帮助赞赏。 :)
答案 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裁剪相同......