小さな画像を無視しながら大きな画像のサイズを変更するには、mogrifyを使用します。

小さな画像を無視しながら大きな画像のサイズを変更するには、mogrifyを使用します。

次のコマンドを実行しています。

mogrify -resize '400x400>' *.png

~によると文書、「幅x高さ>」ジオメトリ(>with)「対応する幅および/または高さパラメータよりも大きい寸法の画像を縮小します。」

幅/高さが400x400未満の画像は影響を受けないと予想していましたが、mogrifyは明確な理由なしにファイルを書き換えます。変更日とファイルサイズの両方が変更されます。

実際に小さな画像だけを残す方法はありますか?何千もの不要な書き込みを避けたいです。

ベストアンサー1

ファイルが体系的に書き換えられたと思うので、mogrify唯一の希望はリストを最初にフィルタリングすることです。jippieが提案したもの。次のことができます(テストされていません):サイズマーク付きの画像ファイルのリストを印刷し、範囲内で関連するサイズの名前のみを保持してからリストを処理します。

identify -format '%w %h %i\n' ./*.png |
awk '$1 > 400 || $2 > 400 {sub(/^[^ ]* [^ ]* /, ""); print}' |
tr '\n' '\0' |
xargs -0 mogrify -resize '400x400'

スクリプトの説明:

  • 各ファイルの幅、スペース、高さ、スペース、ファイル名を含む行を印刷します。バージョンによっては、identify最後の\n改行を追加する必要があるかもしれません(ImageMagick 6.6.0)、重複しますが無害になるかもしれません(GraphicsMagick 1.1.11)。
  • awk)各行の幅($1)と高さ($2)が前提条件を満たす場合:
    • 2 番目の空白文字の前のすべてのテキストを削除します。これにより、幅と高さが削除されます。
    • ファイル名である行の残りの部分を印刷します。
  • 改行文字を null 文字に置き換えます。
  • filenameに対してコマンドを実行するために呼び出されますxargs -0。 (プレーンはスペースや埋め込み入力を処理できないためmogrify使用できません。)xargs\'"

ファイル名には、改行文字を除く任意の文字を含めることができます。

おすすめ記事