web-dev-qa-db-ja.com

同じ名前で変換して保存するImageMagickコマンド

私はImageMagick convertコマンドを使用してサムネイルを作成し、変換された画像をPHPの別のディレクトリに1つずつ保存しています。

しかし、変換された画像に画像名を保持する方法を理解することはできません。

> convert 1.JPG -resize 120X120 thumb/*.JPG

出力ファイル名を入力と同じに保つ必要があります。助けてください。

25

簡単な解決策はコピーで、その後にmogrify(別のimagemagickツール)が続きます。これは同じ名前を保持し、変換と同じ引数を取ります。

cp *.jpg thumb/
cd thumb
mogrify -resize 120X120 *.JPG

または、find -execまたはxargsを使用して、シェルスクリプトを少し実行することもできます。

# using -exec
find . -iname "*.JPG" -maxdepth 1 -exec convert -resize 120x120 {} thumbs/{} \;

# using xargs
find . -iname "*.JPG" -maxdepth 1 | xargs -i{} convert -resize 120x120 {} thumbs/{}
25
Adam

別の方法:

convert *.jpg -resize 80% -set filename:f '%t' ../'%[filename:f].jpg'

変換されたファイルを上のフォルダに配置します。

オプション-set filename:f '%t'は、プロパティfilename:fを拡張子なしの現在のファイル名に設定します。 filename:で始まるプロパティは、出力ファイル名で参照できる特殊なケースです。ここでは、これを../'%[filename:f].jpgに設定します。これは、親ディレクトリで拡張子が.jpgに置き換えられた画像ファイル名になります。

ドキュメント参照:

26

多くの入力を必要としないもう1つの簡単な方法は、 GNU Parallel :です。

parallel convert {} -resize 120X120 thumb/{} ::: *.jpg

convertは、:::の後に指定されたファイルごとに呼び出され、{}は各呼び出しのファイル名に置き換えられます。これによりファイルも並行して処理されるため、ここにある他のソリューションよりもはるかに高速である可能性があります。

ファイルタイプを変換する場合にも機能します。

parallel convert {} {.}.png ::: *.jpg

{.}は拡張子のないファイル名に置き換えられるため、簡単に変更できます。

5
Luchs

これが私がすることです:

すべてのファイルをfilename-new.extensionに変換します

for FILE in *; do convert -resize 320 $FILE $(echo $FILE | sed 's/\./-new./'); done

すべてのfilename-new.extensionファイルをfilename.extensionに戻します。

for FILE in *; do mv $FILE $(echo $FILE | sed 's/-new//'); done
2
mikemaccana