在一行中转换和组合多个图像 Imagemagick (windows)

Convert and combine multiple images in one line Imagemagick (windows)

我有 7 张尺寸、方向、颜色相同的图像 space。

我正在尝试将其中的 6 个转换为 LinearGray,并将每三个图像组合为 RGB(RGB_1 和 RGB_2)。 在此之后我需要从第 7 个图像 Subtract RGB_1 和 Add RGB_2 到结果。

magick.exe ( AAA.png BBB.png CCC.png -colorspace LinearGray ) -combine RES.tga

按预期工作,但是

magick.exe ( ( AAA.png BBB.png CCC.png -colorspace LinearGray ) -combine ) GGG.png -compose minus_dst RES.tga

magick.exe ( ( AAA.png BBB.png CCC.png -colorspace LinearGray ) -combine ) -compose minus_dst GGG.png RES.tga

总是创建两个输出,RES-0.tgaRES-1.tga,其中一个是组合的 RGB 图像,第二个是 GGG.png.

的灰度版本

我什至无法进入 Add RGB_2 组合图像的下一步。

我做错了什么,我该如何解决?

谢谢。

你的问题没有太多人关注,所以我想帮助你一下。可以用来让生活更轻松、处理速度更快的一件事是使用 Magick 持久寄存器 (MPR),它被命名为内存块,您可以在其中创建内容,将其放在一边并命名然后稍后再参考它 - 对于更复杂的工作流程非常方便 - 并且比写入磁盘和开始新过程快得多。

所以,这里介绍了如何将前 3 张图片组合成一张图片,并将其作为 "left" 放在 MPR 中,对接下来的 3 张图片执行相同的操作,并将它们放在一边作为 "right" 在 MPR 中,然后调用两个图像并将它们并排放置。这有点做作,但它证明了我的建议。我还写了一个中间 PNG 文件用于调试目的:

magick 1.png 2.png 3.png -combine -write "left.png"  -write MPR:left  +delete ^
       4.png 5.png 6.png -combine -write "right.png" -write MPR:right +delete ^
       MPR:left MPR:right +append result.png

另请注意,我不需要任何括号,因为我删除了第一个组合图像,因此在添加 [4-6].png

之前图像堆栈中没有任何内容

所以,回到你的问题,你可能想要更像这样的东西:

magick 1.png 2.png 3.png -colorspace lineargray -combine -write "RGB1.png" -write MPR:RGB1 +delete ^
       4.png 5.png 6.png -colorspace lineargray -combine -write "RGB2.png" -write MPR:RGB2 +delete ^
       MPR:RGB1 7.png -compose minus_dst -composite ^
       MPR:RGB2 -compose add -composite result.png

当然,您会在生产代码中删除中间调试图像的 -write

您可以通过先执行第二行,然后执行第一行来稍微加快速度。如果你这样做了,你就不需要保存 MPR:RGB1 并重新加载它,因为它已经在图像堆栈中准备好进行减法了,但差异可能很小,而且这种方式更接近你的思维过程。而且它已经比3个单独的命令和3个单独的带有中间磁盘文件的进程好得多了,所以我们不用太担心。