pngquant を使って画像(PNG)を一括圧縮するバッチを作ってみた
おはようございます。
先日、JPEG形式の画像ファイルを圧縮してみたので、
今回はPNGの圧縮をコマンドから実行できる「pngquant」というソフトを試してみたいと思います。
JPEGの圧縮についてはこちら。
スポンサーリンク
ダウンロード
次のサイトにアクセスします。
「Binary for Windows」をクリックしてファイルをダウンロードします。
インストール
ダウンロードした圧縮ファイルを展開し、任意の場所に格納します。
今回は「D:\Software\pngquant」としました。
環境変数の設定
exeが存在するディレクトリ以外でも実行できるように環境変数にパスを追加します。
[ Win ] + [ Break ] 、またはエクスプローラーなどで、PCのプロパティを開きます。
「システムの詳細設定」メニューを選択します。
「詳細設定」タブの「環境変数」ボタンをクリックします。
「システム環境変数」の「Path」を選択して「編集」ボタンをクリックします。
「新規」ボタンをクリック、表示された入力画面で、先ほど pngquant を格納したディレクトリを設定、「OK」ボタンをクリックします。
確認
コマンドプロンプトを起動し、次のコマンドを実行します。
1 | pngquant -V |
上記のように表示されれば、インストール完了です。
圧縮バッチ
次のプログラムをテキストエディタ等に貼り付け、「~.bat」など名前を付けて保存します。
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 | @echo off REM ----------------------------------------------------------------------------------------- REM 画像圧縮バッチ REM ----------------------------------------------------------------------------------------- REM 概要: REM 実行ファイルと同じディレクトリに存在する画像ファイル(PNG)を REM 指定した比率で圧縮し、Exifなどの情報を削除します REM 必須: REM オープンソースソフトウェアの「pngquant」を利用します。 REM https://pngquant.org/ REM REM ----------------------------------------------------------------------------------------- REM ------------------------------------------------- REM 変数 REM ------------------------------------------------- SETBATCHNAME=%~n0 SETYMD=%date:~-10,4%%date:~-5,2%%date:~-2,2% SETLOGFILE=%CD%\log\%BATCHNAME%_%YMD%.log REM * ========================================================================================================= REM * 処理開始 REM * ========================================================================================================= :LA_STARTBATCH cls ECHO ========================================================================================= ECHO 画像圧縮バッチ ECHO. ECHO ----------------------------------------------------------------------------------------- ECHO 実行ファイルと同じディレクトリに存在する画像ファイル(PNG)を圧縮します ECHO. ECHO ========================================================================================= ECHO. SETDIRPATH=%CD% 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%にあるPNGファイルを圧縮します。 >> %LOGFILE% ECHO. >> %LOGFILE% ECHO. ECHO %DIRPATH% ECHO 上記ディレクトリ内にあるPNGファイルを圧縮します。 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最後のファイルがダブルので別途拡張子を判定する SETISPNG=FALSE IF'%%~xA'=='.png'SETISPNG=TRUE IF!ISPNG!==TRUE( ECHO %%~nA SETFILE=%%A SETNFILE=%%~dpA!PREFIX!%%~nxA IFNOT'%PREFIX%'==''( COPY/Y!FILE!!NFILE!>nul SETFILE=!NFILE! ) pngquant--speed1--ext.png--force!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 |
まとめ
先日作ったバッチを修正して、拡張しを判定して処理をわけたりもできそうですね。
最近の記事からは画像をアップする前にリサイズや圧縮を行ってからやるようにしていて、
その効果もそのうち出てきてくれるといいなと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません