【问题标题】:Imagemagick convert and compose batch of filesImagemagick 转换和编写批量文件
【发布时间】:2017-08-09 14:02:22
【问题描述】:

我正在尝试快速转换一批文件,如下所示:

convert ./src/*.png -set filename: '%t' -gravity West -draw 'image over 0,0 424,600 "./panel.png"' ./dest/%[filename:].png

与 COMPOSITE 非常相似:

convert ./src/*.png ./panel.png -set filename: '%t' -gravity +0+0 -composite ./dest/%[filename:].png

除了最后一个不工作,只是制作了第一个看起来很糟糕的文件。 好像是bug?

有人知道如何使用 -composite 使其更正确吗? 对于 shell 中的每个文件的 for|awk|ls|find 是不可接受的 - 因为这比第一个示例要慢。

【问题讨论】:

    标签: imagemagick batch-processing imagemagick-convert


    【解决方案1】:
    • 读入文件列表,
    • 设置它们的输出文件名,
    • 包括 IM 特殊图像占位符“null:”,
    • 读入您的叠加图像,
    • (可选)设置几何形状,
    • 并使用“-layers composition”合成叠加到所有其他图像上。

    null: 将原始输入文件列表与叠加图像分开,因此 ImageMagick 知道您要在堆栈中的哪个位置开始合成。

    尝试这样的事情(每行一个步骤以提高可读性):

    convert ./src/*.png \
        -set filename: '%t' \
        null: \
        ./panel.png \
        -layers composite ./dest/%[filename:].png
    

    【讨论】:

    • 是的,像convert ./src/*.png -set filename: '%t' null: ./panel.png -geometry +0+0 -layers composite ./dest/%[filename:].png一样工作,非常感谢
    【解决方案2】:

    您可以使用 Imagemagick mogrify 命令。见http://www.imagemagick.org/Usage/basics/#mogrifyhttp://www.imagemagick.org/Usage/basics/#mogrify_compose

    cd to input directory
    mogrify -format png -path ./dest -gravity West -draw 'image over 0,0 424,600 "./panel.png"' *.png
    

    【讨论】:

    • 是的,但在这种情况下,它与转换非常相似,因为 -path 参数和 -composite 更快
    【解决方案3】:

    看起来是错误?

    不是错误。您的第二个命令是告诉 ImageMagick 使用与图像堆栈匹配的所有文件,并将其合成为一个。

    您可以使用 mogrify 实用程序尝试相同的解决方案,但我相信如果您使用单个 for 循环扩展 bash 脚本,它会方式更简单。

    for f in $(ls src/*.png)
    do
       dest=$(basename $f);
       convert "$f" ./panel.png -gravity West -composite "./dest/$dest"
    done
    

    【讨论】:

    • 需要更多时间 :(
    • 如果您需要节省时间,请使用Gnu Parallel
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多