星期二, 3月 29, 2011
Multi-threading 版 PNG 最佳化
Pingback 回去 XD
由於最近收圖有點胸兇,總是讓PNG優化工序超時完成,只好靠 Multi-threading 加快一下進度了。
和 scribe 的不同,我比較想用 batch 加外部工具達成,當然就是 *nix 眾都熟悉的
xargs 在 Windows 下有幾個版本: cygwin xargs、MSYS xargs、UnxUtils xargs、GnuWin32 xargs。
但是我試到最後,只有 cygwin xargs 的支援比較全面。
比 scribe 的我還增加了 "/b" 參數讓優化過程在標準以下的優先度下執行,不會讓你受打擾 XD
pngoutall_nproc.bat:
backlink: 用 Python 跑 Multi-threading 版 PNG 最佳化
由於最近收圖有點
和 scribe 的不同,我比較想用 batch 加外部工具達成,當然就是 *nix 眾都熟悉的
xargs
。xargs 在 Windows 下有幾個版本: cygwin xargs、MSYS xargs、UnxUtils xargs、GnuWin32 xargs。
但是我試到最後,只有 cygwin xargs 的支援比較全面。
比 scribe 的我還增加了 "/b" 參數讓優化過程在標準以下的優先度下執行,不會讓你受打擾 XD
pngoutall_nproc.bat:
@echo off SET PNGOPFX=%~dp0 SET CYGPFX=D:\cygwin\bin\ if NOT "%1"=="/r" GOTO pre2 SHIFT SET DIRSW=/s :pre2 if NOT "%1"=="/b" GOTO proc SHIFT SET POOSW=/b :proc dir /b %DIRSW% *.png | %CYGPFX%xargs.exe -d '\n' --max-args=1 -P %NUMBER_OF_PROCESSORS% %PNGOPFX%pngoptone.bat %POOSW% SET DIRSW= SET POOSW= SET PNGOPFX= SET CYGPFX=pngoptone.bat:
@echo off SET POOPFX=%~dp0 if NOT "%1"=="/b" GOTO PROC SHIFT SET EXECPFX=start /b /wait /belownormal :PROC %POOPFX%binmay.exe -i "%~1" -o nul -s "00 00 00 08 61 63 54 4c" 2> nul if ERRORLEVEL 1 ( %POOPFX%touch.exe -r "%~1" "%~1.time" %EXECPFX% %POOPFX%optipng.exe -zw32k -zc9 -zm9 -zs0,3 -f0,5 -i0 "%~1" if not ERRORLEVEL 1 ( %EXECPFX% %POOPFX%advdef.exe -z -4 "%~1" %EXECPFX% %POOPFX%deflopt.exe -b "%~1" %EXECPFX% %POOPFX%pngout /y /b0 "%~1" if not ERRORLEVEL 2 ( %EXECPFX% %POOPFX%advdef.exe -z -4 "%~1" %EXECPFX% %POOPFX%deflopt.exe -b "%~1" ) ) %POOPFX%touch.exe -r "%~1.time" "%~1" if exist "%~1.time" del "%~1.time" ) else ( ren "%~1" "%~n1.apng" ) SET EXECPFX= SET POOPFX=
backlink: 用 Python 跑 Multi-threading 版 PNG 最佳化
標籤: Software
留言
Cool! 這下我也可以不用Python了。
更重要的是,Below normal可以讓我邊上網/聽音樂邊處理XD
不過我只有使用UxUtil版的xargs,因為不用其他dll太方便。
只是沒有-d,所以找 find -print0 和 xargs -0 搭配。
不過後來發現傳進去的參數沒有"括"起來傳到批次檔,導致有空白的檔名會錯誤。
所以我只好用 find -printf "\"%f\"\0" 繞過這個問題。
---
少了Python多了find, xargs,應該是還划算。如果能依賴更少就更好了。
可是我不想自己寫一個 C 程式,還是算了。
更重要的是,Below normal可以讓我邊上網/聽音樂邊處理XD
不過我只有使用UxUtil版的xargs,因為不用其他dll太方便。
只是沒有-d,所以找 find -print0 和 xargs -0 搭配。
不過後來發現傳進去的參數沒有"括"起來傳到批次檔,導致有空白的檔名會錯誤。
所以我只好用 find -printf "\"%f\"\0" 繞過這個問題。
---
少了Python多了find, xargs,應該是還划算。如果能依賴更少就更好了。
可是我不想自己寫一個 C 程式,還是算了。
我 hack 了一下 UnxUtils xargs 加了一些新 switch XD
http://rtfreesoft.blogspot.com/2011/04/my-enhanced-unxutils-xargs.html
http://rtfreesoft.blogspot.com/2011/04/my-enhanced-unxutils-xargs.html
發佈回應
留不了言?試試在這裡留吧。回首頁
發佈留言