如何使用 imagemagick 将同一图像附加到多个图像
How to append a same image to multiple images using imagemagick
您好,我想将同一张图片添加到多张图片的左侧。第一张图片是一个图例,它对于我后来想要 3x2 蒙太奇的所有 6 张图片都很常见。
我在剪辑之前尝试了下面的这个命令,但它没有用。我想看看我是否可以在不添加 for 循环的情况下使它工作,这会减慢代码速度。
convert +append image_3_1.png image_1_[1-6].png -geometry +10+0 test.png
我想将 image_3_1 添加到以 image_1 开头的所有 6 张图像中。有什么想法吗?
您的问题不清楚:
- 您的输入图像和预期输出图像是什么样子或它们有多大,
- 你是真的需要中间图像还是只需要蒙太奇,
for
循环的实际问题是什么
所以这里有一些想法...
选项 1
这个通过使用单个 magick
并仅加载一次 side
图像并将其克隆到内存中,避免了 for
循环和 magick
的多次调用:
magick side.png \
\( +clone image_1.png +append -write out_1.png +delete \) \
\( +clone image_2.png +append -write out_2.png +delete \) \
\( +clone image_3.png +append -write out_3.png +delete \) \
\( +clone image_4.png +append -write out_4.png +delete \) \
\( +clone image_5.png +append -write out_5.png +delete \) \
image_6.png +append out_6.png
它产生6个输出文件如下:
选项 2
这避免了 for
并行 运行 6 个副本 magick
的循环:
magick side.png image_1.png +append out_1.png &
magick side.png image_2.png +append out_2.png &
magick side.png image_3.png +append out_3.png &
magick side.png image_4.png +append out_4.png &
magick side.png image_5.png +append out_5.png &
magick side.png image_6.png +append out_6.png &
wait
它生成与上面相同的 6 个输出文件。
选项 3
这通过使用 GNU Parallel 来更简洁地完成同样的工作:
parallel magick side.png image_{}.png +append out_{}.png ::: {1..6}
选项 4
如果您不需要中间文件,只需要蒙太奇:
parallel -k magick side.png {} +append ppm:- ::: image_*png | magick montage -tile 2x3 -geometry +5+5 ppm:- montage.png
选项 5
这很相似,避免生成中间输出文件,也避免使用 GNU Parallel:
magick side.png \
\( +clone image_1.png +append -write ppm:- +delete \) \
\( +clone image_2.png +append -write ppm:- +delete \) \
\( +clone image_3.png +append -write ppm:- +delete \) \
\( +clone image_4.png +append -write ppm:- +delete \) \
\( +clone image_5.png +append -write ppm:- +delete \) \
image_6.png +append ppm:- | magick montage -background black -geometry +5+10 -tile 2x3 ppm:- montage.png
选项 6
这个不使用 for
循环,单个进程,没有单独的 montage
命令并且不生成中间文件:
magick side.png -write MPR:side +delete \
\( MPR:side image_1.png MPR:side image_2.png +append \) \
\( MPR:side image_3.png MPR:side image_4.png +append \) \
\( MPR:side image_5.png MPR:side image_6.png +append \) \
-append montage.png
将 +append
和 -append
替换为 -smush 以获得更大的布局和图像间距灵活性。
选项 7
也许 -smush
是这样的:
magick side.png -write MPR:side +delete -background cyan \
\( MPR:side image_1.png MPR:side image_2.png +smush 10 \) \
\( MPR:side image_3.png MPR:side image_4.png +smush 10 \) \
\( MPR:side image_5.png MPR:side image_6.png +smush 10 \) \
-smush 30 montage.png
我的猜测是,如果选项 6 对您来说足够灵活,则在大多数情况下,选项 6 在大多数机器上都是最快的。如果您需要更大的灵活性,请选择选项 7 或 5。
关键字:ImageMagick,图像处理,蒙太奇,布局,平行,smush。
您好,我想将同一张图片添加到多张图片的左侧。第一张图片是一个图例,它对于我后来想要 3x2 蒙太奇的所有 6 张图片都很常见。
我在剪辑之前尝试了下面的这个命令,但它没有用。我想看看我是否可以在不添加 for 循环的情况下使它工作,这会减慢代码速度。
convert +append image_3_1.png image_1_[1-6].png -geometry +10+0 test.png
我想将 image_3_1 添加到以 image_1 开头的所有 6 张图像中。有什么想法吗?
您的问题不清楚:
- 您的输入图像和预期输出图像是什么样子或它们有多大,
- 你是真的需要中间图像还是只需要蒙太奇,
for
循环的实际问题是什么
所以这里有一些想法...
选项 1
这个通过使用单个 magick
并仅加载一次 side
图像并将其克隆到内存中,避免了 for
循环和 magick
的多次调用:
magick side.png \
\( +clone image_1.png +append -write out_1.png +delete \) \
\( +clone image_2.png +append -write out_2.png +delete \) \
\( +clone image_3.png +append -write out_3.png +delete \) \
\( +clone image_4.png +append -write out_4.png +delete \) \
\( +clone image_5.png +append -write out_5.png +delete \) \
image_6.png +append out_6.png
它产生6个输出文件如下:
选项 2
这避免了 for
并行 运行 6 个副本 magick
的循环:
magick side.png image_1.png +append out_1.png &
magick side.png image_2.png +append out_2.png &
magick side.png image_3.png +append out_3.png &
magick side.png image_4.png +append out_4.png &
magick side.png image_5.png +append out_5.png &
magick side.png image_6.png +append out_6.png &
wait
它生成与上面相同的 6 个输出文件。
选项 3
这通过使用 GNU Parallel 来更简洁地完成同样的工作:
parallel magick side.png image_{}.png +append out_{}.png ::: {1..6}
选项 4
如果您不需要中间文件,只需要蒙太奇:
parallel -k magick side.png {} +append ppm:- ::: image_*png | magick montage -tile 2x3 -geometry +5+5 ppm:- montage.png
选项 5
这很相似,避免生成中间输出文件,也避免使用 GNU Parallel:
magick side.png \
\( +clone image_1.png +append -write ppm:- +delete \) \
\( +clone image_2.png +append -write ppm:- +delete \) \
\( +clone image_3.png +append -write ppm:- +delete \) \
\( +clone image_4.png +append -write ppm:- +delete \) \
\( +clone image_5.png +append -write ppm:- +delete \) \
image_6.png +append ppm:- | magick montage -background black -geometry +5+10 -tile 2x3 ppm:- montage.png
选项 6
这个不使用 for
循环,单个进程,没有单独的 montage
命令并且不生成中间文件:
magick side.png -write MPR:side +delete \
\( MPR:side image_1.png MPR:side image_2.png +append \) \
\( MPR:side image_3.png MPR:side image_4.png +append \) \
\( MPR:side image_5.png MPR:side image_6.png +append \) \
-append montage.png
将 +append
和 -append
替换为 -smush 以获得更大的布局和图像间距灵活性。
选项 7
也许 -smush
是这样的:
magick side.png -write MPR:side +delete -background cyan \
\( MPR:side image_1.png MPR:side image_2.png +smush 10 \) \
\( MPR:side image_3.png MPR:side image_4.png +smush 10 \) \
\( MPR:side image_5.png MPR:side image_6.png +smush 10 \) \
-smush 30 montage.png
我的猜测是,如果选项 6 对您来说足够灵活,则在大多数情况下,选项 6 在大多数机器上都是最快的。如果您需要更大的灵活性,请选择选项 7 或 5。
关键字:ImageMagick,图像处理,蒙太奇,布局,平行,smush。