mozjpegでJPEG画像のサイズを軽くするぞい!

 

Mozilla、JPEGファイルの圧縮率を高めるプロジェクト「mozjpeg」を発表 - ITmedia ニュース 

Mozillaは3月5日(現地時間)、新しいJPEGエンコーダーを構築するプロジェクト「mozjpeg」を発表した。従来のJPEGとの互換性を保ちつつ、圧縮率を高めるのが目的という。

 

ソースは mozilla/mozjpeg · GitHub から。

ぼくのようにビルドってなんぞや?というじょうよゎな子は こちら からビルドされたものをDLしよう!

 

jpegtranで劣化させずに最適化

http://free.pjc.co.jp/JPEG1/

cjpeg: Jpeg圧縮(bmp,gif,pnm などから -> jpg)
djpeg: Jpeg展開(jpg から -> bmp,gif,pnm ..)
jpegtran: Jpegファイルに対して変換/変形
rdjpgcom: Jpegファイル操作
wrjpgcom: Jpegファイル操作

 jpegtran.exeはJPEGを再圧縮せずに変換するプログラムらしい。

なので、それを使ってコマンドラインで変換。

JPEGをさらに高圧縮する「mozjpeg 2.0」で2GB超の画像ファイルを圧縮 - GIGAZINE

jpegtran.exe -outfile "output.jpg" -optimise -copy none "input.jpg"

 

参考リンク

 

オマケのバッチファイル

mozjpeg_optimize.bat

jpegtran.exeと同じフォルダに置いて、JPEGファイルをDrag&Dropすると変換。

(メモ帳などにD&Dして、.bat拡張子で保存してください)

@echo off
cd /d "%~dp0"
if "%~1" == "" goto error

 

mkdir "%~dp1mozjpeg\"

 

echo mozjpegで変換します。

jpegtran.exe -optimize -outfile "%~dp1mozjpeg\%~n1_mozjpeg.jpg" "%~dp1%~n1.jpg"

echo 処理を完了しました。

 

 

master_mozjpeg_optimize.bat

mozjpeg_optimize.bat jpegtran.exe と同じフォルダに置いて、JPEGファイルをDrag&Dropすると そのファイルを含むフォルダ内のJPEGファイルを一括変換します。

 ※赤字の部分はパスに合わせて書き換えてね!

@echo off

:first
set LIST=
for %%i in ("%~dp1*.jpg") do set LIST=%LIST%%%i

echo ****************************************************************

 

:mozjpeg
if not exist "%LIST%" goto end

echo Start %LIST% %time%
echo ****************************************************************
echo.
call "C:convert\mozjpeg\mozjpeg_optimize.bat" "%LIST%"
ping localhost -n 6 >nul
echo.
echo.
echo ****************************************************************
echo End %LIST% %time%
ping localhost -n 6 >nul
echo.

mkdir "%~dp1move\"
move "%LIST%" "%~dp1move\"
ping localhost -n 6 >nul

set LIST=
for %%i in ("%~dp1*.jpg") do set LIST=%LIST%%%i
ping localhost -n 6 >nul

echo.
rem shift
rem goto 720


:stock

set LIST=
for %%i in ("%~dp1*.jpg") do set LIST=%LIST%%%i

move "%LIST%" "%~dp1"

set LIST=
for %%i in ("%~dp1*.jpg") do set LIST=%LIST%%%i
ping localhost -n 6 >nul

if exist "%LIST%" (goto mozjpeg) else (goto end)

 

:end
echo ****************************************************************
echo すべてのエンコード処理が完了しました。
echo ****************************************************************
echo.
pause
goto first

バッチ作成にあたって参考にさせていただきました!