[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 ディレクトリを作成しておくこと。
