這些年,我一直在使用 JavaScript 、CocosCreator做開發,只要是他們不能解決的,我都不太願意去弄,或者說是不太情願去做。真的是手中有把錘子,看什麼都是釘子,越是熟悉一樣東西,越容易被思維定式給束縛,難以成長!
前段時間,我在嘗試學習 Python,想用來做點什麼,一直沒想好。我必須得學以致用才行,不然過兩天又忘記了,但這次機會來了!
前兩天,有位老朋友找到我,尋求 Cocos 圖集的裁圖工具,我順手給了一個 Windows 版本的 PngSplit.exe,我曾經用過多次感覺還行!
小知識:初學的夥伴可能還不清楚,什麼是「圖集」?
圖集通常是使用 TexturePacker 這個工具,將多張小的碎圖合併,導出生成一個 png 文件與同名的 plist 文件。
遊戲引擎通過解析 plist 文件,獲取對應 png 圖片上的子圖,還原碎圖。通過圖集可以減少文件體積,提高文件加載速度,更重要的是他能減少 Drawall 提升渲染效率!
❞但,我剛給了朋友後,想到如果是 Cocos 格式的圖集是有 plist 文件的,通過 plist 可以完美換原之前的碎圖,但使用 PngSplit 拆分一些有透明像素的幀動畫圖片就不行了!
PngSplit 導出的子圖有兩大缺陷:
無法還原文件名,特別是序列幀文件,文件順序是亂序的;這樣生成的資源,要重新製作動畫難度非常之大,還需要花更多的時間。想到這裡,有點點興奮,我拿起 Python 開幹!代碼大概分成兩大部分:解析 plist 文件,解析出子圖在圖集中的矩形位置大的思維有了,解析 plist 應該是有對應的工具庫的,我也是 Python 小白 面向百度編程 絕對是不能不掌握的技巧
輸入:python3 plist 解析
繼續在百度上搜索:python3 圖片處理
有一個名為 PIL 的庫顯示的最多,簡單了解一下:
python image library 圖像庫,處理圖像功能,該庫提供了廣泛的文件格式支持,如JPEG、PNG、GIF、等,它提供了圖像檔案、圖像顯示、圖像處理等功能。
注意安裝時,使用的是:pip install pillow
❞大概花了半個小時,簡單了解了一下 PIL 的功能,其中的 Image 模塊正是我需要的 :
# 從當前圖像返回矩形區域的副本
# box是一個4元祖,定義從左、上、右、下的像素坐標
Image.crop(box)有了大概的了解,就開始真正的動手了,剛開始真的很不習慣,經常範錯,比如:
好兩次我想放棄了,明明知道怎麼做,就是弄不好,語法出錯,運行報錯!
最氣人的是,我寫出的代碼,到處是波浪線,我用的是 PyCharm 這個神器級別的IDE。
還好我堅持完成了第一個版本,也就 50 多行代碼,拆分的圖片還不帶透明區,因為我只會使用Image.crop 這個函數,剩下的我還不會。
休息了兩天,再次撿起來,我又找到兩個 Image 對象上的方法:
# 翻轉、旋轉圖像
image = image.transpose(Image.ROTATE_90)
# 將image圖像粘貼base圖像中
# box參數我給的是偏移2元組
base.paste(image, (offset_x, offset_y))功能搞定生成圖片非常完美,還原了 plist 中的文件名、原始大小、透明區域偏移,整個代碼加上注釋也不到100行。
最後,我還研究了一下 Python 的代碼規範,與 JS、TS 完全不是一個門派的。Python 的變量名、函數名都是用小寫,代碼之間用下劃線隔開,感覺是回到了讀書時用的 C 語言的年代
終於整個代碼清爽起來了,而且我還加了不少注釋。
最後版本雖然東拼西湊將功能實現了,但我總覺得怪怪的,第一次用 Python 做個開源小工具求大神們指點,還有那些可以改進的地方,也希望這個工具腳本能幫助到大家,節省、省力、省錢!
github倉庫地址,您也可以通過【閱讀原文】跳轉連結!
https://github.com/ShawnZhang2015/tp-png-split.git原創不易,碼字不易,感謝點讚分享,願我們一起共同成長!
1. 2020社區最新教程精華700+頁PDF!
2. 騰訊課堂Creator零基礎修仙實戰上線啦!
3. 遊戲換皮被默許,微信後臺竟然支持代碼授權
4. NativeAPI手機原生功能調用接口豐富
5. Creator全自動代碼生成器來襲!
6. 臥槽,一不小心我成副業案列了!