[Linux] 複数の JPEG ファイルを一括&一発でロスレス圧縮する方法
前書き
この方法は bash でスクリプトを書くので、別にリナックスじゃなくても使える方法になると思います。今回僕は Peppermint で実施、動作確認を行いました。
前提条件
ロスレス圧縮するツールとして jpegoptim コマンドがインストール済みであること。jpegoptim でなくても他のコマンドに置き換えても良いでしょう。
bash スクリプト
以下のような bash スクリプトを作ります。
#!/bin/bash #-------------------------------------------------- # Variables #-------------------------------------------------- BASEDIR="/home/oreore" TMPDIR="${BASEDIR}/tmp" TMPFILE="${TMPDIR}/jpg_file_list.tmp" SRCDIR="$1" DSTDIR="${SRCDIR}/optimize" EXTENSION="jpg" #-------------------------------------------------- # Main #-------------------------------------------------- ls -1 ${SRCDIR}/*.${EXTENSION} > ${TMPFILE} ls ${DSTDIR}/*.${EXTENSION} if [ $? -eq 0 ]; then rm -f ${DSTDIR}/*.${EXTENSION} fi num=1 while read jpgfile do echo "creating file${num}..." jpegoptim --strip-all -m70 --dest ${DSTDIR} "${jpgfile}" num=`expr ${num} + 1` rm -f "${jpgfile}" done < ${TMPFILE}
このファイルの名前が compress_jpg_files.bash とした場合、以下のように実行します。
$ chmod 744 compress_jpg_files.bash $ ./compress_jpg_files.bash /home/oreore/blog/image /home/oreore/blog/image//optimize/Photo 2017-05-04 21 46 16.jpg creating file1... /home/oreore/blog/i,age//Photo 2017-05-04 21 46 16.jpg 4032x3024 24bit N [OK] 3041951 --> 1398421 bytes (54.03%), optimized. creating file2... /home/oreore/blog/image//Photo 2017-05-08 19 50 34.jpg 4032x3024 24bit N [OK] 2642628 --> 1066183 bytes (59.65%), optimized. creating file3... /home/oreore/blog/image//Photo 2017-05-08 20 19 01.jpg 4032x3024 24bit N [OK] 3302496 --> 1531321 bytes (53.63%), optimized. $
compress_jpg_files.bash に JPEG 画像のあるディレクトリを引数に与えます。そうすると、そのディレクトリにあるすべての JPEG ファイルが圧縮対象になり、ロスゼロ圧縮されます。
圧縮されたファイルは、引数で指定したディレクトリにある optimize ディレクトリに保存されますので事前に optimize ディレクトリを作成しておくこと。