我有一个大的 Tiff 图像,我想将它切成 512x512 的图块并写入磁盘。
在过去,我像这样使用 ImageMagick:
convert -crop 512x512 +repage image_in.tif image_out_%d.tif
但是最近这一直不起作用,进程内存不足等。
VIPS中是否有类似的命令?我知道有一个 CLI,但我在文档中找不到示例或有用的解释,我仍在尝试找出 nip2 GUI 的东西。任何帮助表示赞赏。:)
我有一个大的 Tiff 图像,我想将它切成 512x512 的图块并写入磁盘。
在过去,我像这样使用 ImageMagick:
convert -crop 512x512 +repage image_in.tif image_out_%d.tif
但是最近这一直不起作用,进程内存不足等。
VIPS中是否有类似的命令?我知道有一个 CLI,但我在文档中找不到示例或有用的解释,我仍在尝试找出 nip2 GUI 的东西。任何帮助表示赞赏。:)
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.tif
10,000 x 10,000 像素的未压缩 RGB 图像在哪里。此外,它只会在少量内存中处理任何大小的图像。
我遇到了同样的问题。似乎 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 裁剪相同的速度......