Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用imagemagick将同一图像附加到多个图像_Imagemagick_Mogrify_Montage - Fatal编程技术网

如何使用imagemagick将同一图像附加到多个图像

如何使用imagemagick将同一图像附加到多个图像,imagemagick,mogrify,montage,Imagemagick,Mogrify,Montage,你好,我想在多个图像的左侧添加一个相同的图像。第一个图像是一个传说,它是所有6个图像的共同点,我稍后要蒙太奇3x2 在蒙太奇之前,我尝试了下面的命令,但没有成功。我想看看我是否可以在不添加for循环的情况下让它工作,这会减慢代码的速度 convert +append image_3_1.png image_1_[1-6].png -geometry +10+0 test.png 我想把图片_3_1添加到所有以图片_1开始的6张图片中。有什么想法吗?您的问题不清楚: 您的输入和预期输出图像的外

你好,我想在多个图像的左侧添加一个相同的图像。第一个图像是一个传说,它是所有6个图像的共同点,我稍后要蒙太奇3x2

在蒙太奇之前,我尝试了下面的命令,但没有成功。我想看看我是否可以在不添加for循环的情况下让它工作,这会减慢代码的速度

convert +append image_3_1.png image_1_[1-6].png -geometry +10+0 test.png

我想把图片_3_1添加到所有以图片_1开始的6张图片中。有什么想法吗?

您的问题不清楚:

  • 您的输入和预期输出图像的外观或大小
  • 不管你真的需要中间图像还是蒙太奇
  • for
    循环的实际问题是什么
所以这里有一些想法


选择1 通过使用单个
magick
并仅加载一次
图像并将其克隆到内存中,该方法避免了
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 这一个通过并行运行6个
magick
副本来避免
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 这一个使用no
for
循环,单个进程,没有单独的
蒙太奇
命令,并且不生成中间文件:

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
替换为,以获得更大的布局和图像间距灵活性


备选案文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。

非常感谢您的详细回答。选项7最适合我!