您的问题不清楚:
- 您的输入和预期输出图像的外观或大小,
- 您实际上需要中间图像还是只需要蒙太奇,
-
for 循环的实际问题是什么
所以这里有一些想法......
选项 1
这个避免了for循环和magick的多次调用,方法是使用单个magick并只加载一次side图像并将其克隆到内存中:
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
这个通过并行运行magick 的6 个副本来避免for 循环:
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 在大多数机器上是最快的,如果它对您来说足够灵活的话。如果您需要更大的灵活性,请使用选项 7 或 5。
关键字:ImageMagick、图像处理、蒙太奇、布局、并行、smush。