
フォルダ内にたくさんの画像があります:
images/image1.jpg
images/image2.jpg
...
これらの画像は Web 用に最適化されていません。
たった 1 つの手順でこれらのイメージを一括最適化する Linux コマンドがあるかどうか知りたいのですが。
アップデート: 各画像に対して 2 つのことを行う必要があります。
画像の幅が 900 ピクセルを超える場合は、幅を 900 ピクセルに縮小します (比率を維持)
ファイルを低品質で保存します。たとえば、元の品質の 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」プログラムを、ファイル名を置き換えて呼び出します。{}
resize '>900x' -quality '70%'
-- 画像を x 軸上で最大 900 ピクセルにサイズ変更し、jpeg 品質を 70% に変更します。がある多くの他の可能なオプションはここにあります。-set filename:newname "%d/%[basename].min.%[extension]"
-- 新しいファイル名で変数を作成します。有効な値についてはドキュメントを参照してください。%d
-- ファイルが存在するディレクトリ%[basename]
-- 拡張子なしのファイル名%[extension]
-- ファイルの元の拡張子
"%[filename:newname]"
-- 前の手順で設定した出力ファイル名