コマンドスクリプトでImageMagickを使用してAutomatorに画像を処理させる方法を教えてください。


2

私はimagemagick合成コマンドで画像の選択を処理するためにシェルスクリプトアクションを使うAutomatorワークフローを作っています。問題が発生しているのは私だけです。ワークフローを実行したときに得られた結果によると、すべてが機能していますが、画像のフォルダに表示されるはずの変更が存在しないことが原因ではないことがわかります。私が使っているimagemagickコマンドはコンソールから正しく機能するので正しいことを私は知っています。 (コンポジットコマンドを出力にエコーして、ターミナルセッションにコピーしました。魅力的に見えました)。ところで:私が作ったストップモーション映画のフェードインを処理するためのワークフロー。はい、私はビデオツールを使って同じことを達成できることを知っていますが、私は出力の画像品質を悪くするためにアクセスできるものを持っています。

これがスクリプトです

imagesCount=$#
rate=$(echo "scale=2; 100/$imagesCount"|bc)
percentage=$rate
for f in "$@"; do
    fileName=${f%.*}
    composite -blend "$percentage" -size 1280x720 "$f" xc:black -alpha Set "$fileName-1.jpg"
    percentage=$(echo "scale=2; $percentage+$rate"|bc)
done

当初、問題の原因はパス内のスペースにあると考えていましたが、ファイルをスペースのないパスに移動することでこの問題を解決しましたが、効果はありませんでした。

この問題がbashコマンドの問題に関連していることはほぼ間違いありませんが、bashはまったくわかりません。これは、bashコマンドスクリプトを書くのは初めてのことです。これを機能させるために。

スクリプト内のエラーが捉えられるほど明白ではない場合、スクリプトをエラーなしで実行してもイメージが処理されない理由を理解できるように、これをデバッグする方法を提案する人がいるでしょうか。


たぶんそれはPATHの問題です。交換しても動作しますか composite その絶対パスで(実行することによって決定することができます which composite ターミナルで)
Percival Ulysses

次のコード行には引用符がありません。percentage = $(scale = 2; $ percentage + $ rate "| bc)
Kaydell

それを指摘してくれてありがとうKaydell。その反響も見逃していました。
Greg

コンポジットが正しくインストールされました。私はImageMagickをインストールしてそれをパスに追加するCactus Labs ImageMagickインストーラを使いました。とても便利な。
Greg

それは変化するように働きました $ff それとも単なる転記ミスですか?またあなたの時価総額 fileName 矛盾しています。
beroe

回答:


2

Automatorを使用して起動するのではなく、シェルスクリプトとしてコマンドラインですべてを実行します。プット #!/bin/bash 最初の行として、そしてそれを実行する

myscript.sh image*.png

どこで image*.png Automatorで選択していると思われる一連の画像ファイルは何ですか。

フォルダ内のすべてのファイルに対して実行する必要がある場合は、それもできます。

また、automatorでスクリプトをテストすることもできます。 echo ${f%.*} コマンド自体の代わりに。


1

交換する for $ffor ffor $f in aa; do :; done のようなエラーになります `$f': not a valid identifier

また composite パス上にない場合は、フルパスを指定します(以下のように) /usr/local/bin/composite

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.