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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください