在单个转换命令中合并 3 个图像并保持大小 ImageMagick

Merge 3 images in a single convert command mantaining size ImageMagick

使用这 3 个单独的代码,我创建了以下 3 个图像,每个图像都具有所需的大小。我在单个命令中合并失败。

此代码生成 P1.png

convert \( \( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 1" \) \
           \( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 2" \) \
 +smush +2 -write P1.png \) null:
 

P1.png (854x37)

此代码生成 P2.png

convert \( \( -size 881x488 xc:"#FFE97F"  \) \
           \( -size 881x488 xc:"#00FF90" \) \
            +smush +6 -resize 1180x441! -write P2.png \) null:

P2.png (1180x441)

此代码生成 P3.png

convert \( \( -size 1104x89! xc:"#00137F" -fill white -font Calibri-Bold -pointsize 48 -gravity center -annotate +0+0 "Different boxes" \) \
-write P3.png  \) null:

P3.png (1104x89)

如果我在图像编辑器中可视化地加入 3 张图像(如 Paint.net),生成的图像为 1180x606,分辨率为每英寸 96 像素。

如何将这 3 个命令合并到一个“转换”命令中,以便最终图像的大小为 1180x606?

我试过这段代码,但我不知道如何正确构造命令

convert \ 
\( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 1" \) \
\( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 2" \) \
+smush +2 \ 
-write mpr:numbers \ 
\
\( 
\( -size 881x488 xc:"#FFE97F" \) \
\( -size 881x488 xc:"#00FF90" \) \ 
-resize 1180x441! +smush +6 mpr:numbers +swap -gravity center -smush +15 +gravity \ 
-write mpr:boxes \ 
-delete 0 \ 
\ 
\( -size 1104x89! xc:"#00137F" -fill white -font Calibri-Bold -pointsize 48 -gravity center -annotate +0+0 "Different boxes" \) \ 
mpr:boxes +swap -gravity center -smush +24 +gravity +write POut.png \) null:

想要的输出是这样的:

感谢您的帮助。

更新

当我在图像编辑器中看到它时(Paint.net 在我的例子中)我可以看到并改变分辨率而不改变像素尺寸。只有英寸的尺寸变化。

Result.png 原始分辨率=120 pixel/inch 尺寸 1180x606

Result.png 更改为分辨率=96 pixel/inch 尺寸仍然是 1180x606,但英寸尺寸已更改

更新 2

fmw42 的代码可以很好地从头开始创建 3 张图像,然后将它们合并。我的问题是如果我使用相同的 fmw42 脚本而是创建 我从另一个图像 (source.png) 裁剪的黄色和绿色框 result.png 不一样。添加裁剪图像时出现什么问题?

我正在使用此代码:

convert \
source.png +repage -write mpr:img -delete 0--1 \
\( \
\( -size 1104x89! xc:"#00137F" -fill white -font Calibri-Bold -pointsize 48 -gravity center -annotate +0+0 "Different boxes" \) \
\) \
\
\( \
\( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 1" \) \
\( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 2" \) \
+smush +2 \
\) \
-smush +24 \
\
\( \
\( mpr:img -crop 881x488+71+376   \) \
\( mpr:img -crop 881x488+992+376  \) \
+smush +6 -resize 1180x441! \
\) \
-smush +15  \
resultX.png

这是source.png

这是不正确的输出

这是否符合您的要求? ImageMagick 6 命令可以像下面这样作为一种方法:

convert \( \( -size 1104x89! xc:"#00137F" -fill white -font Calibri-Bold -pointsize 48 -gravity center -annotate +0+0 "Different boxes" \) \
-write P3.png  \) \
\
\( \( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 1" \) \
\( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 2" \) \
+smush +2 -write P1.png \) \
-smush +24 \
\
\( \( -size 881x488 xc:"#FFE97F"  \) \
\( -size 881x488 xc:"#00FF90" \) \
+smush +6 -resize 1180x441! -write P2.png \) \
-smush +15 \
result.png


请注意,我可能没有使用与您相同的字体。

请评论:

https://imagemagick.org/Usage/basics/#parenthesis https://imagemagick.org/Usage/layers/#smush https://imagemagick.org/Usage/files/#write

回答您的 Update2 问题:您需要在使用 -gravity center 后重新使用 +gravity 重新定义重力。您还需要在裁剪后添加 +repage。

convert \
source.png +repage -write mpr:img -delete 0--1 \
\( \
\( -size 1104x89! xc:"#00137F" -fill white -font Calibri-Bold -pointsize 48 -gravity center -annotate +0+0 "Different boxes" \) \
\) \
\
\( \
\( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 1" \) \
\( -size 426x37 xc:"#4FA7FF" -fill black -font Calibri-Bold -pointsize 32 -gravity center -annotate +0+0 "Number 2" \) \
+smush +2 \
\) \
-smush +24 +gravity \
\
\( \
\( mpr:img -crop 881x488+71+376 +repage \) \
\( mpr:img -crop 881x488+992+376 +repage \) \
+smush +6 -resize 1180x441! \
\) \
-gravity center -smush +15  \
resultX.png


经过深思熟虑地使用 ImageMagick 的内存寄存器,例如 "mpr:something",您可以将整个图像的构造简化为这样...

convert -gravity center -background white -font helvetica \
   -size 1104x89 xc:"#00137F" -fill white -pointsize 48 \
   -annotate +0+0 "Different boxes" -write mpr:diffbox +delete \
   -size 426x37 xc:"#4FA7FF" xc:"#4FA7FF" -fill black -pointsize 32 \
   -annotate +0+0 "Number %[fx:t+1]" +smush 2 -write mpr:numbox +delete \
   -size 588x441 xc:"#FFE97F" xc:"#00FF90" +smush 4 \
   mpr:numbox +insert -smush 15 mpr:diffbox +insert -smush 24 result.png

这适用于 Windows Ubuntu bash shell 运行 ImageMagick 6.8.9-9。您必须指定自己的字体,如果您对所有内容使用相同的字体,则只需指定一次。