【问题标题】:ImageMagick: How to batch append 4 parts of images into one (2 rows, 2 columns) (I have 500+ images that need to be combined like this)ImageMagick:如何将图像的 4 个部分批量附加到一个(2 行,2 列)中(我有 500 多个图像需要像这样组合)
【发布时间】:2020-06-09 15:41:27
【问题描述】:

大家! 我在 Windows 10 上使用 ImageMagick-7.0.10-Q16。我试过用谷歌搜索答案,但我仍然对如何做到这一点感到非常困惑。大多数答案都是针对 UNIX 而不是 Windows,我不知道这意味着什么,或者给了我错误。我没有任何编码或 Windows PowerShell 经验,请原谅我的缓慢

我已经扫描了分成四个 jpg 文件的书籍页面。图像以页码和相应作品的方向命名。 BL=左下角。 BR=右下角。 TR=右上角。 TL=左上角。 (BM = 合并的底部部分。TB = 合并的顶部部分)。所以“BL0001.jpg”是第 1 页的左下角。我没有提到它们的大小,因为我不希望它们被调整大小或其他任何东西。我只是希望它们像这样的拼图一样通过 append 组合起来: Combined jpg pieces. 那里的边框和文本框只是为了演示,不包括在内

所以文件例如是这样的:

BL0001.jpg
BR0001.jpg
TL0001.jpg
BR0001.jpg

BL0002.jpg
BR0002.jpg
TL0002.jpg
BR0002.jpg
And so on...

这是我在 Windows PowerShell 中尝试的最后一件事:

magick convert B*0001.jpg +append 0001BM.jpg
magick convert T*0001.jpg +append 0001TM.jpg
magick convert 0001*.jpg +swap -append 0001merged.jpg

这就像我想要的那样将 4 个部分组合成一张图像。我发现添加 * 就像通配符一样工作,并一次将所有图像(如 BR 和 TR)合并在一起。但我不能为页码(在本例中为“B*0001.jpg”中的“0001”)这样做,因为这会将文件夹中的所有文件合并到同一个图像中,这是我不想要的。所以我想弄清楚的是如何使用顺序编号系统为不同的页面“批量”运行这个命令。换句话说,使用命令将图像的各个部分批量组合成一个图像,但文件夹中的所有扫描页面均为 jpg。我知道上面的命令在最终合并之前使用合并的顶部和底部部分创建附加文件,但我不知道如何制作这个命令。我也愿意尝试其他命令/东西

【问题讨论】:

  • setlocal EnableDelayedExpansion & for %%I in ("TL*.jpg") do set "NAME=%%~I" & magick convert "!NAME!" +append "TR!NAME:~2!" +append "BL!NAME:~2!" +append "BR!NAME:~2!"(虽然不知道magick,但主要是为了演示如何在批处理文件中循环)...
  • 我已将 [batch-file] 标签替换为 [batch-processing] 标签,因为您特别提到了 Windows powershell,并提供了您在其中使用的代码。您还在标题中使用了术语batch append,在问题正文中使用了“batch” run,这些不是批处理文件!
  • @aschipfl 谢谢!我不得不稍微改变一下magick命令,但可以正常工作

标签: powershell append imagemagick batch-processing imagemagick-convert


【解决方案1】:

在简单的 Windows BAT 脚本中使用 ImageMagick v7,您可以执行以下操作...

@echo off
setlocal EnableDelayedExpansion

for /l %%n in ( 1 1 9999 ) do (
   set V1=000%%n
   set V1=!V1:~-4!
   magick *!V1!.jpg +append -crop 2x1@ +swap -append +repage !V1!merged.jpg
)

exit /b

使用“for”循环一次将所有四个“*0001.jpg”图像读取到 ImageMagick 命令中。 "set V1=" 行是为了确保变量有正确数量的前导零。

IM 命令将四个图像附加、裁剪和附加到正确排序的输出中,并将图像写入“0001merged.jpg”。然后继续处理“*0002.jpg”等等。

我在“for”命令中使用“9999”对要处理的图像集数量设置了上限,以使用前导零的数量。确保该数量与您拥有的图像集数量相同或更多。它只会在超过图像集的数量后为每个循环打印一个错误,但不会造成任何伤害。

注意:使用 ImageMagick v7 您应该只使用“magick”,因为当您使用“magick convert”时,它会模拟 IMv6 行为。你可能通常不会想要那个。

【讨论】:

  • 非常感谢!这行得通。它还可以让我更改保存文件的文件夹。这是超级好!我不知道转换问题,所以谢谢你告诉我。我发现我还有其他四份扫描文件,但只有两份大小相同。我当时所做的是再次使用您的 .bat,但用 magick -montage 命令替换了 magick 命令。像这样:magick montage *!V1!.jpg -mode Concatenate -tile 2x4 -border 0。只需要注意它按字母顺序读取文件
猜你喜欢
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
相关资源
最近更新 更多