TexturePacker是一個非常好用的小圖合併工具,介紹它的文章非常多,多數都是使用GUI工具的,但是:
- 如果原始圖片發生了改變,我們就需要重新手動拼接一下,麻煩.
- 使用GUI界面非常不高端,我高大猿族絕對首選使用Command Line啊.
安裝TexturePacker會附帶一個command line工具,讓我們一起學習一下如何使用吧.
##環境搭建
我一般首選在Windows下開發(不要打我),這裏就只講Windows環境的配置
1.先去這裏下載安裝文件,完成後一路無腦下一步,OK.
2.大家在C:\Program
Files\TexturePacker\bin
目錄下可以看到兩個exe文件,TexturePacker.exe
和TexturePackerGUI.exe
,前者是命令行工具,後者是GUI工具.
3.默認TexturePacker
是沒有加到環境變量中的,我們需要手動來,右鍵點擊計算機->屬性->高級系統設置->環境變量,找到PATH
後將C:\Program
Files\TexturePacker\bin
添加到末尾,注意要在前面加;
.
4.運行cmd,輸入TexturePacker
大家應該能夠看到下面的內容:
如果不能的話請檢查拼寫和第2
步.大家可以仔細閱讀一下內容,寫的十分詳細,用過TexturePacker的話基本上都能對應起來.
##小試牛刀
你過你看完打印出的信息的話可以發下末尾部分有三個示例,如下:
看起啦十分簡單,讓我們試一下吧,感謝微博小夥伴@sosoayaen發現的小祕密,使得我們可以快速的在任意位置打開命令行.找一個有這一堆圖片的文件夾的上層目錄,按住Shift
點擊右鍵
,會發現一個菜單項在當前目錄打開命令行
,打開後按照示例輸入TexturePacker
001/*.png
,然後如示例說的:
creates out.plist and out.png from all png files in assets
trimming all files and creating a texture with max. 2048x2048px
實際情況卻不完全是這樣的,你可能會得到這樣的錯誤:
臥槽,這是什麼情況啊,明明就是按照官方的示例來的嘛,google完全沒有任何答案啊,經過一番痛苦的實驗後,終於發現了原因所在,這裏不能輸入:
1
|
TexturePacker 001/*.png
|
而應該是這個樣子:
1
|
TexturePacker 001
|
這個問題可能是由於我使用的版本太舊或使用Windows導致的,如果你沒有遇到,那麼最好!
##參數詳解
本想着把所有參數都講一遍,寫到一半發現臥槽太多了,而且好些都用不到,這裏挑一些常用的分析下,以下內容都有進行測試,還是比較準確的,如果有問題,歡迎指出.
注:
-
選項含有
<...>
的選項表示含有參數需要填寫. - 粗體表示比較重要的選項.
####輸出
–sheet <filename>
+生成的圖片名,支持png,jpg,pvr,pvr.czz,pvr.gz格式
+示例:--sheet
out.png
–data <filename>
- 生成的plist文件名
- 示例:
--data out.plist
–format <format>
–auto-sd
- 自動生成sd資源
- 示例:
--auto-sd
- 注:這個要注意一點,如果要使用這個參數,你輸入的
sheet
和data
名必須含有-hd
或@2x
,TP會自動生成不帶後綴的sd數據.
–texturepath <path>
- 在生成的
sheet
文件的路徑前加你 - 示例:
--texturepath image/tower
這樣在plist文件中realTextureFileName
的值爲image/tower/out.png
- 注:這個參數主要用在當你的圖片與plist文件不再同一個目錄時使用,不會改變
out.png
的目錄
–trim-sprite-name
- 剪裁掉拼接圖片的後綴名
- 示例:
--trim-sprite-name
這樣在plist文件中<key>001.png</key>
會變成<key>001</key>
- 注:是剪裁用來拼接的文件而不是生成文件,如果你的資源管理類似於android那樣,使用圖片時不加後綴名,那麼打包時可以使用這個選項
–replace <regexp>=<string>
- 按照原文的翻譯是使用
<string>
替換掉拼接圖片的文件名中正則表達式匹配的字符串 - 臥槽,正則表達式啊一聽就尼瑪高大強啊,可惜老夫不會啊,怎麼辦呢?回家去翻翻金瓶梅改天告訴大家.
- 這個TM太有用了,後面我遇到的那個問題,用這個來解決最好不過了
–ignore-files <regexp>
- 按照原文的翻譯是忽略所有滿足給定條件的圖片(可以使用時間作爲條件),你可以使用
*
或?
,但在使用bash時應避免使用通配符.
####尺寸
先上一張cocos2d-x支持的最大圖片尺寸:
還有官方的這句話:
For the developers, if you want to cross platforms and run your games smoothly, you should keep your texture size less than 1024*1024, that is the lowest restriction for most machines.
–width/–height <int>
- 兩個參數,放在一塊說了,設置輸出圖片的寬度/高度
- 示例:
--width 100
--height 100
- 注:這個值設置的大了無所謂,會產生空白區域,但是如果太小,就會報錯:
1
error: Could not fit all sprites into the sprite sheet.
–max-width/–max-height/–max-size <int>
- 設置輸出圖片的最大寬度/高度/尺寸
- 示例:
--max-width 1024
--max-height 1024
前面兩個等價於後面--max-size 1024
- 注:
1.和上面兩個參數的區別在於告訴TP實際值別超過這個值就OK,而上邊那兩個參數告訴TP實際值一定是這個.
2.默認值爲2048
3.如果實際值大於設置的最大值會產生錯誤:1
error: Sprite sheet size is too small.
–allow-free-size
- 允許輸出圖片不是2的冪,以最小尺寸輸出
- 示例:
--allow-free-size
- 注:這個一般開啓,cocos2d-x2.0開始就已經支持圖片不是2的冪了
####間距和旋轉
–shape-padding <int>
- 圖塊之間縫隙的寬度,默認值是
2
- 示例:
--shape-padding 100
–border-padding <int>
- 可以理解爲邊框的寬度,默認值爲
2
- 示例:
--border-padding 100
–padding
- 間距,這個參數等價於上面兩個參數同時同時作用
- 示例:
--padding 100
- 注:如果沒有開啓
--allow-free-size
可能和你想象的不太一樣
–inner-padding
- 試了一下,這個參數的作用應該是給每個sprite的周圍加一個邊框,默認值爲0
- 示例:
--inner-padding 100
- 注:上面的這幾個參數作用都不是很大
–enable-rotation/diable-rotation
- 開啓/關閉旋轉,默認值和輸出的格式有關係,cococ2d格式默認enable
- 示例
--enable-rotation
--diable-rotation
- 注:這個很好理解,爲了排版更密集些,有的圖片會被旋轉
–trim/no-trim
- 剪裁圖片,即移除圖片周圍的透明像素,保留原始尺寸,默認開啓
- 示例:
--trim
no-trim
- 注:這個要格外注意一下,這個參數略微有些問題,如果沒有了解帶來的後果的話還是使用
--no-trim
更安全些,我會在後面的仔細講一下.
–crop
- 與上面的一條類似,移除圖片四周的透明像素,不保留原始尺寸,保存爲一張更小的圖片
- 示例:
--crop
- 注:同上,要小心使用,儘量不在這裏使用,而是改爲前期用其它工具處理
–trim-threshold
- 與Trim類似,只是這個選項有一個參數,表示剪裁掉alpha值小於這個參數的像素,取值
0~255
,默認爲0
. - 示例:
--trim-threshold
–disable-auto-alias
- 關閉自動命名,什麼意思呢?TP在打包時會自動識別相同的圖片,最終在大圖裏只會保留一張,這樣會更加的節省資源,這個參數將會關閉這個功能
- 示例:
--disable-auto-alias
- 注:這樣參數還是不要設置的好
####其他常用選項
–opt
- 設置輸出圖片的像素格式 一般默認RGBA8888
- 示例:
--opt RGB444
- 注:這個選項一般不做更改,如果想壓縮資源體積的話,可以改爲RGBA4444這樣圖片可以減小一半的體積.具體大家可以看下面這張圖:
##常見問題
錯誤: error: Error in sprite: .png:
Failed to load image!
解決方案: 去掉目標路徑末尾的.png試試.
錯誤: error: Could not fit all sprites into the sprite sheet.
解決方案:
1.查看有無設置--width
or --height
,這個錯誤通常是由於輸出圖片的尺寸太小導致的.
2.查看有無--max-width/--max-height/--max-size
,沒有的話加上,有的話將參數值改大一些.
錯誤: error: Sprite sheet size is too small.
解決方案:參見上個錯誤中的解決方案2,--max-width/--max-height/--max-size
默認值爲2048
,試着改成4096
試試,如果解決了,不要高興,因爲大多數移動設備都不支持這個尺寸,可以考慮分開打包.
錯誤: error: Unknown argument –XXX - please check parameters or visit http://www.texturepacker.com for
newer version
解決方案: 檢查XXX的拼寫是否正確
問題: 程序中獲得圖片的尺寸與打包前不一致
解決方案: 檢查參數是否含有--crop
,有的話刪除,有沒有--no-trim
,沒有的話加上.
##後記
講了那麼多參數,其實常用的沒有幾個,下面這個是我最終使用的命令:
1
|
TexturePacker --sheet out.png --data out.plist --allow-free-size --no-trim --max-size 1024 --format cocos2d animation
|
文章到這裏就要結束了,但其實還沒有完,--trim
到底爲什麼不建議使用?使用了會發生什麼問題?它和--crop
的具體區別在哪裏?plist文件中frame的路徑和其他plist的重複了怎麼辦?程序中怎麼做才能做到打包和不打包的差異最小化?金瓶梅你什麼時候看完?
本文標題:在Command Line中使用TexturePacker
文章作者:justbilt
發佈時間:2013-12-12, 10:33:02
最後更新:2016-02-14, 13:21:11
原始鏈接:http://blog.justbilt.com/2013/12/12/use_tp_on_command_line/
許可協議: "署名-非商用-相同方式共享 4.0" 轉載請保留原文鏈接及作者。