複数の画像ファイルを 1 つの手順で一括最適化する Linux コマンドはありますか?

複数の画像ファイルを 1 つの手順で一括最適化する Linux コマンドはありますか?

フォルダ内にたくさんの画像があります:

images/image1.jpg
images/image2.jpg
...

これらの画像は Web 用に最適化されていません。

たった 1 つの手順でこれらのイメージを一括最適化する Linux コマンドがあるかどうか知りたいのですが。

アップデート: 各画像に対して 2 つのことを行う必要があります。

  1. 画像の幅が 900 ピクセルを超える場合は、幅を 900 ピクセルに縮小します (比率を維持)

  2. ファイルを低品質で保存します。たとえば、元の品質の 70% にします。

答え1

インストールイメージマジック:

sudo apt-get install imagemagick

次のようにコマンドを使用しますconvert

mkdir new
for file in images/*jpg
do convert -quality 70% -resize '>900x' "$file" new/$(basename "$file")
done

答え2

大量のファイルがあり、これを迅速に処理したい場合は、並列プログラムを使用することもできます。

sudo apt install imagemagick parallel

そして次のようになります:

find . \( -name '*.jp*g' -o -name '*.png' \) -a ! -name '*.min.*' -type f -print0 | \
parallel -0 'convert {} -resize '>900x' -quality '70%' \
    -set filename:newname "%d/%[basename].min.%[extension]" "%[filename:newname]"'

それを詳しく見ていきましょう:

  • find-- ファイルを探す
    • .-- 現在のディレクトリ内
    • \( -name '*.jp*g' -o -name '*.png' \)-- png または jpeg のいずれかです (「jpg」と「jpeg」はどちらも一般的な拡張子です)
    • -a ! -name '*.min.*'-- すでに最小化されているファイルをスキップします
    • -type f-- シンボリックリンクや奇妙な名前のディレクトリではなく、実際のファイルです
    • -print0-- これらのファイルをヌルバイトで区切って印刷します(スペースで中断されないようにするため)
  • parallel-- 前のコマンドから読み取り、各要素に対してこのコマンドを並列に実行します
    • -0-- 各要素はヌルバイトで区切られます
    • convert {}-- imagemagickの「convert」プログラムを、ファイル名を置き換えて呼び出します。{}

関連情報