jpegoptimを使って画像(JPEG)を一括圧縮するバッチを作ってみた
おはようございます。
昨日の今日ですが、
早速画像を一括で圧縮するバッチを作ってみたので公開します。
今回は、
jpegoptim というオープンソースソフトウェアを利用しました。
jpegoptim のインストールからバッチまでを説明します。
スポンサーリンク
ダウンロード
Downloadボタンをクリックしてファイルをダウンロードします。
インストール
ダウンロードした圧縮ファイルを展開し、任意の場所に格納します。
今回は「D:\Software\jpegoptim-1.3.0-win32-binary」としました。
環境変数の設定
exeが存在するディレクトリ以外でも実行できるように環境変数にパスを追加します。
[ Win ] + [ Break ] 、またはエクスプローラーなどで、PCのプロパティを開きます。
「システムの詳細設定」メニューを選択します。
「詳細設定」タブの「環境変数」ボタンをクリックします。
「システム環境変数」の「Path」を選択して「編集」ボタンをクリックします。
「新規」ボタンをクリック、表示された入力画面で、先ほど jpegoptim を格納したディレクトリを設定、「OK」ボタンをクリックします。
確認
コマンドプロンプトを起動し、次のコマンドを実行します。
1 | jpegoptim -V |
上記のように表示されれば、インストール完了です。
圧縮バッチを作った
バッチと同じディレクトリに存在する画像(JPEG)を指定した比率で圧縮し、Exifなどの情報も削除します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | @echo off REM ----------------------------------------------------------------------------------------- REM 画像圧縮バッチ REM ----------------------------------------------------------------------------------------- REM 概要: REM 実行ファイルと同じディレクトリに存在する画像ファイル(JPG)を REM 指定した比率で圧縮し、Exifなどの情報を削除します REM 必須: REM オープンソースソフトウェアの「jpegoptim」を利用します。 REM https://sourceforge.net/projects/jpegoptim/ REM REM ----------------------------------------------------------------------------------------- REM ------------------------------------------------- REM 変数 REM ------------------------------------------------- SETBATCHNAME=%~n0 SETYMD=%date:~-10,4%%date:~-5,2%%date:~-2,2% SETLOGFILE=%BATCHNAME%_%YMD%.log REM * ========================================================================================================= REM * 処理開始 REM * ========================================================================================================= :LA_STARTBATCH cls ECHO ========================================================================================= ECHO 画像圧縮バッチ ECHO. ECHO ----------------------------------------------------------------------------------------- ECHO 実行ファイルと同じディレクトリに存在する画像ファイル(JPG)を ECHO 指定した比率で圧縮し、Exifなどの情報を削除します ECHO. ECHO ========================================================================================= ECHO. SETDIRPATH=%CD% ECHO. SET/pisize=比率(1~100)を入力(または[c]キャンセル)⇒ IF'%isize%'=='c'GOTOLA_ENDBATCH IF'%isize%'==''GOTOLA_STARTBATCH REM 数値かどうかチェック SET/Acheck=%isize%*1 IF%check%==0( GOTOLA_INPUT_MISSING ) ECHO. SET/pseq=圧縮したファイルに付与する接頭語を入力(または[c]キャンセル)⇒ IF'%seq%'=='c'GOTOLA_ENDBATCH REM コマンドチェック IF'%seq%'==''( setlocalenabledelayedexpansion SET/pconfirm=接頭語を入力しない場合、元ファイルが上書きされますがよろしいですか?[y/n]⇒ CALL:LA_INPUT_CHECK!confirm!yn IF'%confirm%'=='n'GOTOLA_CANCELL ) SETPREFIX=%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/pconfirm=よろしいですか?[y/n]⇒ CALL:LA_INPUT_CHECK%confirm%yn IF'%confirm%'=='n'GOTOLA_CANCELL ECHO. ECHO スタート! setlocalenabledelayedexpansion SETCNT=0 FOR/R%%AIN(*)DO( REM何故かFOR文で拡張子フィルターすると REM最後のファイルがダブルので別途拡張子を判定する SETISJPG=FALSE IF'%%~xA'=='.jpg'SET ISJPG=TRUE IF'%%~xA'=='.jpeg'SETISJPG=TRUE IF!ISJPG!==TRUE( ECHO %%~nA SETFILE=%%A SETNFILE=%%~dpA!PREFIX!%%~nxA IFNOT'%PREFIX%'==''( COPY/Y!FILE!!NFILE!>nul SETFILE=!NFILE! ) jpegoptim--strip-all--max=!isize!!FILE!>>%LOGFILE% ) ) ECHO コンプリート! echo. GOTOLA_ENDBATCH EXIT/B REM * ========================================================================================================= REM * コマンドチェック REM * ========================================================================================================= :LA_INPUT_CHECK ECHO %2 > tmp.text SETRET= FOR/F"usebackq"%%tIN(`findstr%1tmp.text`)DOSETRET=%%t DELtmp.text if'%RET%'==''( GOTOLA_INPUT_MISSING ) EXIT/b REM * ========================================================================================================= REM * エラー処理 REM * ========================================================================================================= :LA_ERROR echo. echo エラーが発生しました。 echo. gotoLA_ENDBATCH REM * ========================================================================================================= REM * 処理中止 REM * ========================================================================================================= :LA_CANCELL ECHO. ECHO 処理は中止されました。 ECHO. GOTOLA_ENDBATCH REM * ========================================================================================================= REM * 入力ミス REM * ========================================================================================================= :LA_INPUT_MISSING ECHO. SET/pmiss=入力に誤りがあります。 GOTOLA_STARTBATCH REM * ========================================================================================================= REM * バッチ終了処理 REM * ========================================================================================================= :LA_ENDBATCH ECHO. >> %LOGFILE% ECHO [%DATE% %TIME%] バッチ処理終了 >> %LOGFILE% ECHO. SET/pend=終了するにはEnterキーを押してください... EXIT |
まとめ
WEBサービスの「compressjpeg」と、同じ圧縮率で比較してみたところ、
バッチの方がややサイズが大きいとう結果になりました。
が、手間を考えるとバッチの方が上ですし、
ケースによって使い分けていこうかと思います。
色々と作ってみているなかで、
やっぱりファイルのリネーム、リサイズ、圧縮なんかを1つのバッチで出来た方が便利だなと感じたので
それも作ってみようかと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません