Skip to content

Instantly share code, notes, and snippets.

@dieseltravis
Last active April 20, 2016 21:43
Show Gist options
  • Select an option

  • Save dieseltravis/343231 to your computer and use it in GitHub Desktop.

Select an option

Save dieseltravis/343231 to your computer and use it in GitHub Desktop.
Usage: png.bat d:\images\
:: use this version when adding an option to Windows's Send To menu
:: https://gist.github.com/dieseltravis/343231
@echo off
setlocal enabledelayedexpansion
:: use passed in folder
SET folder=%~1
:: get original png sizes
set oldsize=0
for %%F in ("%folder%\*.png") do ( set /a oldsize=!oldsize!+%%~zF )
echo Optimizing all PNGs in folder: "%folder%" ...
:: OptiPNG http://optipng.sourceforge.net/ v0.7.5 03/24/2014
:: location of OptiPNG executable
set optipng=.\OptiPng\optipng
:: use zlib settings 256,512,1k,2k,4k,8k,16k,32k, compression level 9, memory levels 8 & 9, strategies 0-3, filters 0-5, preserving attributes if possible
for %%z in (32k 16k 8k 4k 2k 1k 512 256) do for %%i in ("%folder%\*.png") do %optipng% -zc9 -zm8-9 -zs0-3 -f0-5 -zw%%z -preserve "%%i"
:: get size of pngs after optipng
set optisize=0
for %%F in ("%folder%\*.png") do ( set /a optisize=!optisize!+%%~zF )
:: AdvanceCOMP advpng http://advancemame.sourceforge.net/comp-download.html v1.19 03/11/2014
:: location of advpng executable
set advpng=.\advancecomp\advpng
:: recompress extreme
for %%i in ("%folder%\*.png") do %advpng% -z -4 "%%i"
:: get size of pngs after advpng
set advcize=0
for %%F in ("%folder%\*.png") do ( set /a advcize=!advcize!+%%~zF )
:: PNGOut http://advsys.net/ken/ Feb 13 2015
:: location of pngout executable
set pngout=.\pngout\pngout
:: use block split threshholds of 0,128,192,256,512,1024
for %%b in (1024 512 256 192 128 0) do for %%i in ("%folder%\*.png") do %pngout% "%%i" /b%%b /r /kpt /y
:: use Huffman blocks 1 or 2
for %%n in (2 1) do for %%i in ("%folder%\*.png") do %pngout% "%%i" /n%%n /r /kpt /y
:: get size of pngs after pngout
set pngosize=0
for %%F in ("%folder%\*.png") do ( set /a pngosize=!pngosize!+%%~zF )
:: jpegtran http://jpegclub.org/jpegtran/ version 9a 19-Jan-2014
echo Optimizing all JPGs in folder: "%folder%" ...
:: location of jpegtran executable file
set jpegtran=.\jpegtran\jpegtran
:: get original size of all jpgs
set oldjsize=0
for %%F in ("%folder%\*.jpg") do ( set /a oldjsize=!oldjsize!+%%~zF )
:: jpegtran doesn't like overwriting files, move them to a temp dir first
set jpgtemp=%folder%\jpegtran
md "%jpgtemp%"
move /Y "%folder%\*.jpg" "%jpgtemp%\" > NUL
:: execute jpegtran on all jpgs, with the destination set to the original path
for %%i in ("%jpgtemp%\*.jpg") do %jpegtran% -copy none -optimize -verbose "%%i" "%folder%\%%~nxi"
:: remove temp dir
rd /S /Q "%jpgtemp%\"
:: get new size
set jpgtsize=0
for %%F in ("%folder%\*.jpg") do ( set /a jpgtsize=!jpgtsize!+%%~zF )
:: echo stats of bytes saved
set /a bytessaved=%oldsize%-%optisize%
echo %bytessaved% bytes saved with OptiPNG.
set /a bytessaved=%optisize%-%advcize%
echo %bytessaved% bytes saved with AdvanceCOMP.
set /a bytessaved=%advcize%-%pngosize%
echo %bytessaved% bytes saved with PNGOut.
set /a jbytessaved=%oldjsize%-%jpgtsize%
echo %jbytessaved% bytes saved with jpegtran.
set /a bytessaved=%oldsize%-%pngosize%+%jbytessaved%
echo %bytessaved% total bytes saved.
endlocal
pause
@dieseltravis

Copy link
Copy Markdown
Author

@dieseltravis

Copy link
Copy Markdown
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment