【问题标题】:Simple Automator Shell Script for image compositing not working用于图像合成的简单 Automator Shell 脚本不起作用
【发布时间】:2015-09-17 14:05:33
【问题描述】:

我创建了一个文件夹操作,以便每次将新的 png 文件放入文件夹时,使用 imagemagick 将新文件和文件夹内的现有 .png 文件合成并保存为新文件。看起来相当简单。我已经在终端中尝试过脚本并且它可以工作但是在自动机中它似乎没有触发......我假设是因为“f”?

以下是我的自动机“Run Shell Script”sn-p:

for f in "$@"
do
   /usr/local/bin/convert BG.png "$f" -composite result.jpg
done

【问题讨论】:

    标签: bash imagemagick automator


    【解决方案1】:

    只需要添加 BG.png & result.jpg 应该在哪里。

    PATH=$PATH:/usr/local/bin
    where=$(dirname $1)
    for f in "$@"
    do
       convert ${where}/BG.png "$f" -composite ${where}/result.jpg
    done
    

    更新

    如果您希望将生成的result.jpg 图像写入另一个位置;然后只需更新最终路径。 Automator 传递了几个环境变量来使用。在这种情况下,HOME 将是您当前登录用户的基本路径。所以如果我想让result.jpg 自动放在Desktop....

    PATH=$PATH:/usr/local/bin
    where=$(dirname $1)
    DESKTOP=${HOME}/Desktop
    # `~/Desktop' will also work in this example
    for f in "$@"
    do
       convert ${where}/BG.png "$f" -composite ${DESKTOP}/result.jpg
    done
    

    【讨论】:

    • 非常感谢!像魅力一样工作!
    • 一个小问题,如果我想更改 result.jpg 的目标文件夹,我会为 ${where} 设置什么?
    • @Chaz 只需更新到新路径。我会更新答案
    • 如果我可以再问一个愚蠢的问题:我将如何捕获“$f”文件名(减去扩展名)以用作生成的 .jpg 的名称?我尝试调用“basename”失败
    • 寻找mogrify & -path,或convert & -format。 SO充满了展示如何做到这一点的答案。请务必为适合您的人 +1
    【解决方案2】:

    也许题外话,但为什么你总是转换 BG.png 一个?

    但回到主题:当您使用即 cron 进行计划脚本运行时,请验证您是否使用完整文件路径。如果您从指定目录运行脚本,它将成功;但是当 cron 运行它时,$CWD - 工作目录 - 可能会有所不同,并且不会处理任何文件。

    例如,您可以将完整的目录路径放在命令行上并像这样解析它:

    DIR=$1
    shift
    for f in "$@"; do
        convert BG.png "$DIR/$f" -composite result.jpg
    done
    

    【讨论】:

    • 啊...所以在查看日志时,工作流程似乎没有任何错误,但“result.jpg”却无处可寻。很好奇,我还必须提供上面编辑的直接转换路径。
    • 是的...试过了,没有。我会更多地玩弄它。似乎很接近。
    • 哦,另外,参考你的第一个题外话问题,我有一个背景,我需要与自动放入文件夹的不同前景图像保持一致。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    相关资源
    最近更新 更多