在单个转换命令中合并 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。您必须指定自己的字体,如果您对所有内容使用相同的字体,则只需指定一次。
使用这 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。您必须指定自己的字体,如果您对所有内容使用相同的字体,则只需指定一次。