如何使用 imagemagick 将图像裁剪成多个矩形网格

How to crop a image into several rectangular grids using imagemagick

如何将大图剪切成网格,以便将较小的图像上传到 Instagram,以组成网格视图中的大图?

我认为 imagemagick 可以用于此。

我不知道 Instagram 网格是什么,也不知道它可能有多大的限制,但是如果你有这样的图像:

你可以把它分成一个网格,3 格宽乘 2 格高:

magick input.jpg -crop 3x2@ tile-%d.png

这里是 6 个方块:

-rw-r--r--@ 1 mark  staff   62199  2 Jun 16:26 tile-0.png
-rw-r--r--@ 1 mark  staff   75180  2 Jun 16:26 tile-1.png
-rw-r--r--@ 1 mark  staff   69615  2 Jun 16:26 tile-2.png
-rw-r--r--@ 1 mark  staff  108443  2 Jun 16:26 tile-3.png
-rw-r--r--@ 1 mark  staff  121714  2 Jun 16:26 tile-4.png
-rw-r--r--@ 1 mark  staff  121384  2 Jun 16:26 tile-5.png

如果您要裁剪成许多较小的部分,最好使用这样的 zero-padded 图块名称,以便它们按顺序排列,如果您希望 re-assemble 它们的话。:

magick input.jpg -crop 5x4@ tile-%04d.png

-rw-r--r--  1 mark  staff   5976  2 Jun 16:33 tile-0000.png
-rw-r--r--  1 mark  staff  15138  2 Jun 16:33 tile-0001.png
-rw-r--r--  1 mark  staff  17625  2 Jun 16:33 tile-0002.png
-rw-r--r--  1 mark  staff  15640  2 Jun 16:33 tile-0003.png
-rw-r--r--  1 mark  staff  12695  2 Jun 16:33 tile-0004.png
-rw-r--r--  1 mark  staff  30138  2 Jun 16:33 tile-0005.png
-rw-r--r--  1 mark  staff  32371  2 Jun 16:33 tile-0006.png
-rw-r--r--  1 mark  staff  30280  2 Jun 16:33 tile-0007.png
-rw-r--r--  1 mark  staff  33469  2 Jun 16:33 tile-0008.png
-rw-r--r--  1 mark  staff  29507  2 Jun 16:33 tile-0009.png
-rw-r--r--  1 mark  staff  34697  2 Jun 16:33 tile-0010.png
-rw-r--r--  1 mark  staff  36322  2 Jun 16:33 tile-0011.png
-rw-r--r--  1 mark  staff  36616  2 Jun 16:33 tile-0012.png
-rw-r--r--  1 mark  staff  40337  2 Jun 16:33 tile-0013.png
-rw-r--r--  1 mark  staff  37466  2 Jun 16:33 tile-0014.png
-rw-r--r--  1 mark  staff  30444  2 Jun 16:33 tile-0015.png
-rw-r--r--  1 mark  staff  36170  2 Jun 16:33 tile-0016.png
-rw-r--r--  1 mark  staff  39400  2 Jun 16:33 tile-0017.png
-rw-r--r--  1 mark  staff  38850  2 Jun 16:33 tile-0018.png
-rw-r--r--  1 mark  staff  36439  2 Jun 16:33 tile-0019.png

要使用 ImageMagick 将任何图像制作成正方形网格,您需要提前确定单元数。像这样的命令首先将输入图像裁剪成一个精确的正方形,然后将该正方形裁剪成 3x3 的较小正方形网格...

convert in.png -gravity center -extent 1:1 -crop 3x3@ out%02d.png

“-extent”将输入裁剪成尽可能大的正方形,因此当它被裁剪成 3x3 网格时,完成的图像也是正方形的。要将图像裁剪成 3x4 网格,您将使用更像这样的命令...

convert in.png -gravity center -extent 3:4 -crop 3x4@ out%02d.png

在该示例中,“-extent”将输入图像裁剪为 3:4 的精确宽高比,因此当您将其裁剪成 3 x 4 块时,它们都是正方形。

这两个示例都将生成具有顺序编号文件名的输出图像,例如 "out01.png"、"out02.png" 等

如果您想按照上传图像的顺序对输出图像进行编号,您可能需要反向编号。您可以在写入输出之前将“-reverse -scene 1”添加到命令中,以获取按照您将用于上传的顺序编号的那些裁剪正方形的文件名。

如果您使用的是 IM7,请将这些命令中的 "convert" 更改为 "magick"。

注意:允许“-extent”使用像“3:4”这样的宽高比的语法自 2018 年初以来才可用。使用旧版本的 ImageMagick 可能需要手动计算第一次裁剪将输入图像设置为适当的宽高比(...或使用 FX 表达式设置视口并使用“-distort”来模拟裁剪)。