10,000個のJPEGを含むディレクトリがあります。ファイルを作成するときに間違いを犯したが、一部は720px×480pxで、すべて448px×336pxである必要があります。ディレクトリには大きすぎるファイルが含まれており、正しいサイズは448ピクセル×336ピクセルです。サイズは同じでなければならないため、720ピクセル×480ピクセルの画像を正しい448ピクセル×336ピクセルに縮小する必要があります。
- 各ファイルは448ピクセル×336ピクセルでなければなりません。
- ファイルが10,000個あるため、各ファイルを調べてどのファイルが大きすぎるかを判断するのは困難です。
ImageMagickまたは同様のバッチツールを使用してサイズが間違った画像のみを選択的にサイズ変更する方法はありますか?
答え1
以下を使用して、幅720ピクセルのファイルを見つけることができます。
identify -format '%w %i\n' *.jpg | awk '/^720/ {print $2}'
*.jpg 拡張を引き起こし、「引数リストが多すぎる」エラーを引き起こす可能性のあるファイルが実際に多い場合は、次のバリアントを使用できます。
find -name '*.jpg' -exec identify -format '%w %i\n' {} + | awk '/^720/ {print $2}'
このリストを使用すると、次のファイルのサイズを変更できます。
find -name '*.jpg' -exec identify -format '%w %i\n' {} + | awk '/^720/ {print $2}' | xargs -I {} convert -resize 488x336! {} {}
感嘆符! 488x336 がない場合、新しい画像はそのサイズに正確に合わせられるため、縦横比が維持され、指定されたサイズは幅と高さの最大サイズです。
答え2
希望できる
convert in.jpg -resize "448x336!" out.jpg
すでにサイズが正しい場合は、ファイルがタッチされないのですか?
残念ながらそうではありません。しかし、imagemagicコマンドライン形式がどのように機能するかを考えると、これは驚くべきことではありません。
したがって、各ファイルの画像サイズを最初に確認する必要があります。今、identify
この目的のためのコマンドでImageMagicを使用しようとしています。
identify -format "%wx%h\n" file.jpg
形式でサイズを表示しますWxH
(例:)448x336
。
サイズがない場合は、448x336
サイズを変更したいと思います。この場合、convert
サイズ変更を使用します。画像を強制的に新しいサイズにするためにアスペクト比を変更した場合でも、サイズを変更したいことを知らせる必要があり448x336
ます。これをサイズにオプション/フラグとして追加します。 :convert
!
convert in.jpg -resize "448x336!" out.jpg
必要なサイズを調整してください。ただし、出力の固定ファイル名はありません。元の名前を持って-res
前に挿入してみましょう。.jpg
たとえば、次のようになります。in-res.jpg
convert in.jpg -resize "448x336!" -set filename:path "%d/%t-res.%e" "%[filename:path]"
find
'コマンドを使用してディレクトリに移動します。.jpg '画像 - または'.JPG".セクションは、コマンドを使用identify
するためにシェルで実行されます。また、最初の操作(オプションではありません)が成功すると、実行されるコマンドとしてシェルを使用します。この場合、サイズを変更すると、次のようにメッセージが表示されます。サイズ変更された各ファイルについて。test
[ ... ]
convert
-exec
find . -type f -iname "*.jpg" -exec bash -c \
'[ $(identify -format "%wx%h\n" "{}") != 448x336 ]' \; -exec bash -c \
'convert "{}" -resize "448x336!" -set filename:path "%d/%t-res.%e" \
"%[filename:path]" ; echo "Resized {}"' \;
bash
2番目のタスクの代わりに一般を使用し-exec convert ...
て新しいタスク(たとえば、-print
または-ls
)を追加して、サイズ変更されたファイルの名前を表示できます。
技術的には、コマンドは1行です(スクロールを避けるために連続した行を表示します)。
そして、この説明を聞いた後も、この文章が読みやすくないという感じがまだ続きます。