web-dev-qa-db-ja.com

LinuxでImagemagickまたは同様のコマンドまたはプログラムを使用して画像をバッチ圧縮する方法

私は最近、私が個人的に使用するために、そして私が持っているブログのために持っている多くの写真を圧縮するために使用したimagemagickからconvertコマンドについて学びました。私の経験では、Imagemagickは最高の画像圧縮プログラムであり、画像の圧縮方法を最も細かく制御できます。圧縮したい画像が他にもたくさんありますが、ファイルごとに1つずつ、何度もconvertコマンドを使用する必要はありません。主な問題は、私がそれを行うのに非常に時間がかかることです。画像を圧縮するための1つの大きなバッチ方法ができるようにしたいと思います。コマンドラインからこれを実行しても問題ありませんが、GUIを使用すると少し直感的になる可能性があります。

これは、元の画像を元のサイズの20%にするために使用するコマンドのサンプルです。変換-サイズ変更20%20140322_102113.jpg 20140322_102113opt.jpg

100枚の画像があり、それらがすべて同じフォルダーにあるとすると、次のようなことができるようになります。

すべての画像の変換-resize20%imagename.jpg imagename_optimized.jpg

すでにこれができるコマンドがあるかどうかはわかりませんが、ない場合は、bashコマンドを作成することを考えましたが、bashについてはあまり詳しくありません。この簡単なbashスクリプトの作成を手伝ってください。または、私のジレンマを解決する方法についてのアドバイスをいただければ幸いです。私はLinuxを使用していますが、Linux専用のソリューションのみが必要です。ありがとう

4
Justin

名前は少し異なる形式ですが、次のとおりです。

for img in *.jpg; do
  convert -resize 20% "$img" "opt-$img"
done
6
technosaurus

'for'ループを使用することは間違いなく機能します-そしてそれは良い一般的なテクニックです-しかしあなたはほぼ確実にあなたのマシンに複数のプロセッサを持っています、それでなぜ一度に1つの変換だけをするのですか?

次のようにすると、物事をより速く動かすことができます。

find *.jpg | xargs -n1 -P8 -I{} convert -resize 20% "{}" "opt-{}"

Xargsの引数は次のとおりです。

n1  - Only give 'convert' one file at a time
P8  - Use 8 processes
I{} - Replace {} with the filename given by 'find'

その後、変換コマンドが実行されます。

4
seumasmac