私はImageMagick convertコマンドを使用してサムネイルを作成し、変換された画像をPHPの別のディレクトリに1つずつ保存しています。
しかし、変換された画像に画像名を保持する方法を理解することはできません。
> convert 1.JPG -resize 120X120 thumb/*.JPG
出力ファイル名を入力と同じに保つ必要があります。助けてください。
簡単な解決策はコピーで、その後に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/{}
別の方法:
convert *.jpg -resize 80% -set filename:f '%t' ../'%[filename:f].jpg'
変換されたファイルを上のフォルダに配置します。
オプション-set filename:f '%t'
は、プロパティfilename:f
を拡張子なしの現在のファイル名に設定します。 filename:
で始まるプロパティは、出力ファイル名で参照できる特殊なケースです。ここでは、これを../'%[filename:f].jpg
に設定します。これは、親ディレクトリで拡張子が.jpg
に置き換えられた画像ファイル名になります。
-set
ドキュメント 、これはfilename:
特殊ケースに言及しています%t
およびその他のフォーマットおよび印刷画像のプロパティ多くの入力を必要としないもう1つの簡単な方法は、 GNU Parallel :です。
parallel convert {} -resize 120X120 thumb/{} ::: *.jpg
convert
は、:::
の後に指定されたファイルごとに呼び出され、{}
は各呼び出しのファイル名に置き換えられます。これによりファイルも並行して処理されるため、ここにある他のソリューションよりもはるかに高速である可能性があります。
ファイルタイプを変換する場合にも機能します。
parallel convert {} {.}.png ::: *.jpg
{.}
は拡張子のないファイル名に置き換えられるため、簡単に変更できます。
これが私がすることです:
すべてのファイルを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