我需要将一个大的(最大 16384x16384px)图像分割成更小的块,通常是 512x512。为此,我使用下面的简单 perl 脚本:
#!/usr/bin/perl
use warnings;
use strict;
my $size = '512x512';
unless ($ARGV[0]) { die "Missing filename as arg" }
unless (-e $ARGV[0]) { die "$ARGV[0] not found.\n" }
my ($newfile, undef) = split(/\./,$ARGV[0]);
system("convert $ARGV[0] -crop $size $newfile" . "_%03d.png");
现在,问题是,我需要为较小的部分建立一个索引,其中包括原始图像中的位置偏移量,例如在 1024x1024 源图像的情况下:
image_000.png 0,0
image_001.png 512,0
image_002.png 0,512
image_003.png 512,512
...或类似的东西。基本上,只是为了跟踪每个特定块在原始图像中的位置。
由于convert
命令传递给system()
我正在考虑只做一个文件的全局并对其进行排序,因为一些快速实验表明较小的块按从左到右,从上到下(直观地)的顺序编号并基于构建索引那个,但我认为必须有一些更简单的东西,涉及perls 自己的 ImageMagick 接口
所以我的问题是:
1.Image::Magick
相当于什么convert $ARGV[0] -crop $size $newfile" . "_%03d.png
?
2.一旦我设法避免了 system() 调用,是否可以根据来自 $image 对象的数据构建索引?
PS:
- 块大小不会经常变化。硬编码 512 很好,所以没有必要从
$size
……中提取它。事实上,我根本不知道我为什么选择使用那个变量。 - 原始图像大小始终可以被块大小整除,因此无需担心剩余部分。
- 为了使 glob() 方法变得棘手,图像并不总是方形的。
identify
也许可以以某种方式考虑使用命令的第三列?