【问题标题】:How to append a same image to multiple images using imagemagick如何使用 imagemagick 将相同的图像附加到多个图像
【发布时间】:2020-12-23 22:17:33
【问题描述】:

您好,我想在多张图片的左侧添加同一张图片。第一张图片是一个图例,它适用于所有 6 张图片,我稍后要进行 3x2 蒙太奇。

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

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

我希望将 image_3_1 添加到以 image_1 开头的所有 6 个图像中。有什么想法吗?

【问题讨论】:

    标签: imagemagick mogrify montage


    【解决方案1】:

    您的问题不清楚:

    • 您的输入和预期输出图像的外观或大小,
    • 您实际上需要中间图像还是只需要蒙太奇,
    • 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。

    【讨论】:

    • 非常感谢您的详细解答。选项 7 最适合我!
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多