jpegoptimを使って画像(JPEG)を一括圧縮するバッチを作ってみた
おはようございます。
昨日の今日ですが、
早速画像を一括で圧縮するバッチを作ってみたので公開します。
今回は、
jpegoptim というオープンソースソフトウェアを利用しました。
jpegoptim のインストールからバッチまでを説明します。
スポンサーリンク
ダウンロード
Downloadボタンをクリックしてファイルをダウンロードします。
インストール
ダウンロードした圧縮ファイルを展開し、任意の場所に格納します。
今回は「D:\Software\jpegoptim-1.3.0-win32-binary」としました。
環境変数の設定
exeが存在するディレクトリ以外でも実行できるように環境変数にパスを追加します。
[ Win ] + [ Break ] 、またはエクスプローラーなどで、PCのプロパティを開きます。
「システムの詳細設定」メニューを選択します。
「詳細設定」タブの「環境変数」ボタンをクリックします。
「システム環境変数」の「Path」を選択して「編集」ボタンをクリックします。
「新規」ボタンをクリック、表示された入力画面で、先ほど jpegoptim を格納したディレクトリを設定、「OK」ボタンをクリックします。
確認
コマンドプロンプトを起動し、次のコマンドを実行します。
jpegoptim -V
上記のように表示されれば、インストール完了です。
圧縮バッチを作った
バッチと同じディレクトリに存在する画像(JPEG)を指定した比率で圧縮し、Exifなどの情報も削除します。
@echo off REM ----------------------------------------------------------------------------------------- REM 画像圧縮バッチ REM ----------------------------------------------------------------------------------------- REM 概要: REM 実行ファイルと同じディレクトリに存在する画像ファイル(JPG)を REM 指定した比率で圧縮し、Exifなどの情報を削除します REM 必須: REM オープンソースソフトウェアの「jpegoptim」を利用します。 REM https://sourceforge.net/projects/jpegoptim/ REM REM ----------------------------------------------------------------------------------------- REM ------------------------------------------------- REM 変数 REM ------------------------------------------------- SET BATCHNAME=%~n0 SET YMD=%date:~-10,4%%date:~-5,2%%date:~-2,2% SET LOGFILE=%BATCHNAME%_%YMD%.log REM * ========================================================================================================= REM * 処理開始 REM * ========================================================================================================= :LA_STARTBATCH cls ECHO ========================================================================================= ECHO 画像圧縮バッチ ECHO. ECHO ----------------------------------------------------------------------------------------- ECHO 実行ファイルと同じディレクトリに存在する画像ファイル(JPG)を ECHO 指定した比率で圧縮し、Exifなどの情報を削除します ECHO. ECHO ========================================================================================= ECHO. SET DIRPATH=%CD% ECHO. SET /p isize=比率(1 ~ 100)を入力(または [c] キャンセル)⇒ IF '%isize%'=='c' GOTO LA_ENDBATCH IF '%isize%'=='' GOTO LA_STARTBATCH REM 数値かどうかチェック SET /A check=%isize%*1 IF %check% == 0 ( GOTO LA_INPUT_MISSING ) ECHO. SET /p seq=圧縮したファイルに付与する接頭語を入力(または [c] キャンセル)⇒ IF '%seq%'=='c' GOTO LA_ENDBATCH REM コマンドチェック IF '%seq%'=='' ( setlocal enabledelayedexpansion SET /p confirm=接頭語を入力しない場合、元ファイルが上書きされますがよろしいですか?[ y / n ]⇒ CALL :LA_INPUT_CHECK !confirm! yn IF '%confirm%'=='n' GOTO LA_CANCELL ) SET PREFIX=%seq% CD %DIRPATH% ECHO [%DATE% %TIME%] バッチ処理開始 > %LOGFILE% ECHO. >> %LOGFILE% ECHO %DIRPATH% >> %LOGFILE% ECHO %DIRPATH%にあるファイルを、指定した比率(%isize%)で圧縮します。 >> %LOGFILE% ECHO. >> %LOGFILE% ECHO. ECHO %DIRPATH% ECHO 上記ディレクトリ内にあるファイルを指定した比率(%isize%)で圧縮します。 ECHO. SET /p confirm=よろしいですか?[ y / n ]⇒ CALL :LA_INPUT_CHECK %confirm% yn IF '%confirm%'=='n' GOTO LA_CANCELL ECHO. ECHO スタート! setlocal enabledelayedexpansion SET CNT=0 FOR /R %%A IN (*) DO ( REM 何故か FOR文で拡張子フィルターすると REM 最後のファイルがダブルので別途拡張子を判定する SET ISJPG=FALSE IF '%%~xA'=='.jpg' SET ISJPG=TRUE IF '%%~xA'=='.jpeg' SET ISJPG=TRUE IF !ISJPG!==TRUE ( ECHO %%~nA SET FILE=%%A SET NFILE=%%~dpA!PREFIX!%%~nxA IF NOT '%PREFIX%'=='' ( COPY /Y !FILE! !NFILE! > nul SET FILE=!NFILE! ) jpegoptim --strip-all --max=!isize! !FILE! >> %LOGFILE% ) ) ECHO コンプリート! echo. GOTO LA_ENDBATCH EXIT /B REM * ========================================================================================================= REM * コマンドチェック REM * ========================================================================================================= :LA_INPUT_CHECK ECHO %2 > tmp.text SET RET= FOR /F "usebackq" %%t IN (`findstr %1 tmp.text`) DO SET RET=%%t DEL tmp.text if '%RET%'=='' ( GOTO LA_INPUT_MISSING ) EXIT /b REM * ========================================================================================================= REM * エラー処理 REM * ========================================================================================================= :LA_ERROR echo. echo エラーが発生しました。 echo. goto LA_ENDBATCH REM * ========================================================================================================= REM * 処理中止 REM * ========================================================================================================= :LA_CANCELL ECHO. ECHO 処理は中止されました。 ECHO. GOTO LA_ENDBATCH REM * ========================================================================================================= REM * 入力ミス REM * ========================================================================================================= :LA_INPUT_MISSING ECHO. SET /p miss=入力に誤りがあります。 GOTO LA_STARTBATCH REM * ========================================================================================================= REM * バッチ終了処理 REM * ========================================================================================================= :LA_ENDBATCH ECHO. >> %LOGFILE% ECHO [%DATE% %TIME%] バッチ処理終了 >> %LOGFILE% ECHO. SET /p end=終了するにはEnterキーを押してください... EXIT
まとめ
WEBサービスの「compressjpeg」と、同じ圧縮率で比較してみたところ、
バッチの方がややサイズが大きいとう結果になりました。
が、手間を考えるとバッチの方が上ですし、
ケースによって使い分けていこうかと思います。
色々と作ってみているなかで、
やっぱりファイルのリネーム、リサイズ、圧縮なんかを1つのバッチで出来た方が便利だなと感じたので
それも作ってみようかと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません