plist圖片列表分割拆分器(修復(fù)輸出圖片錯誤的BUG)

網(wǎng)上的所有python版本代碼截歉,對于新版本的plist都是錯誤的而咆!

本人做了修改霍比,主要有:

1.更多旋轉(zhuǎn)標(biāo)簽增加支持;

2.python的圖片旋轉(zhuǎn)函數(shù)調(diào)用錯誤暴备,修改為transpose;

具體請復(fù)制以下代碼保存為py文件悠瞬,例如up.py,然后在plist和圖片文件所在文件夾運(yùn)行:up.py -plist c:\1.plist -png c:\1.png -dir c:\1\

注意:

以上命令行“c:\1”文件夾提前創(chuàng)建才行涯捻。

以上命令浅妆,需要提前安裝好python環(huán)境,并安裝Pillow才行(自己去搜索吧)汰瘫;

看代碼:

#!/usr/bin/env?python??

#?coding=utf-8??

#?Python?2.7.10??


"""

????This?utility?is?used?to?parse?plist?file?which?is?packed?by?Texture?Packer?to?original?images.

????usage:

????????-plist?specify?the?path?of?plist?file(required?parameter).

????????-png?specify?the?path?of?png?file(required?parameter).

????????-dir?specify?a?output?directory(optional).?By?default,?it?will?make?a?new?directory?named

?????????????with?plist?filename?in?current?directory?to?save?images.

"""??



import?argparse??

import?os??

import?sys??

from?xml.etree?import?ElementTree??

from?PIL?import?Image??



class?PlistParser(object):??


#?initializer??

def?__init__(self,?plist,?png_image,?output_dir):??

self.plist_file?=?plist??

self.png_file?=?png_image??

self.atlas_dir?=?output_dir??


#?convert?a?xml?tree?to?dict.??

def?convert_tree_to_dict(self,?tree):??

????????d?=?{}??

for?index,?item?in?enumerate(tree):??

if?item.tag?==?'key':??

if?tree[index?+?1].tag?==?'string':??

d[item.text]?=?tree[index?+1].text??

elif?tree[index?+?1].tag?==?'true':??

d[item.text]?=True??

elif?tree[index?+?1].tag?==?'false':??

d[item.text]?=False??

elif?tree[index?+?1].tag?==?'dict':??

d[item.text]?=self.convert_tree_to_dict(tree[index?+?1])??

return?d??


#?split?png?file?into?individual?images.??

def?split_png_from_plist(self):??

#?generate?output?directory.??

target_file_dir?=self.atlas_dir;??

if?target_file_dir?is?None:??

target_file_dir?=?plist_filename.replace('.plist',?'')??

if?not?os.path.isdir(target_file_dir):??

????????????????os.mkdir(target_file_dir)??


#?open?the?source?image.??

????????src_image?=?Image.open(png_filename)??

plist_content?=?open(plist_filename,'r').read()??

????????plist_root?=?ElementTree.fromstring(plist_content)??

plist_dict?=self.convert_tree_to_dict(plist_root[0])??


to_list?=lambda?x?:?x.replace('{',?'').replace('}',?'').split(',')??

for?k,?v?in?plist_dict['frames'].items():??

pos_str?=?str(v['frame'])??

????????????rect_list?=?to_list(pos_str)??

width?=?int(rect_list[3]?if??(v.has_key('textureRotated')?and?v['textureRotated'])?or?(v.has_key('rotated')?and?v['rotated'])?else?rect_list[2]?)??

height?=?int(rect_list[2]?if??(v.has_key('textureRotated')?and?v['textureRotated'])?or?(v.has_key('rotated')?and?v['rotated'])?else?rect_list[3]?)??

????????????bounding_box?=?(??

int(rect_list[0]),??

int(rect_list[1]),??

int(rect_list[0])?+?width,??

int(rect_list[1])?+?height,??

????????????)??

#size_list?=?[?int(x)?for?x?in?to_list(v['sourceSize'])?]??


#?print?k,bounding_box??

????????????rect_image?=?src_image.crop(bounding_box)??

if??(v.has_key('textureRotated')?and?v['textureRotated'])?or?(v.has_key('rotated')?and?v['rotated']):??

????????????????rect_image?=?rect_image.transpose(Image.ROTATE_90)??


????????????outfile?=?os.path.join(target_file_dir,?k)??

????????????rect_image.save(outfile)??



if?__name__?==?'__main__':??

#?register?all?available?parameters.??

parser?=?argparse.ArgumentParser(usage='please?use?unpacker.py?-h?to?get?usage?information.')??

parser.add_argument('-plist',?help='Specify?the?path?of?plist?file.',?type=str)??

parser.add_argument('-png',?help='Specify?the?path?of?png?file.',?type=str)??

parser.add_argument('-dir',?help='Specify?a?output?directory.',?type=str)??


#?get?parameters.??

????args?=?parser.parse_args()??

????plist_filename?=?args.plist??

????png_filename?=?args.png??

????output_dir?=?args.dir??


if?plist_filename?is?None?or?png_filename?is?None?or?output_dir?is?None:??

print?"example:?python?unpacker.py?-plist?your_plist_file.plist?-png?your_png_file.png?-dir?output_directory"??

sys.exit(1);??


#?test?whether?the?file/dir?is?None??

if?plist_filename?is?None:??

print?'make?sure?to?use?-plist?to?specify?the?plist?file?path.'??

sys.exit(1)??

if?png_filename?is?None:??

print?'make?sure?to?use?-png?to?specify?the?source?png?image.'??

sys.exit(1)??


#?test?whether?the?file/dir?exits??

if?not?os.path.exists(plist_filename):??

print?'error:?plist?file?doesn\'t?exist.'??

sys.exit(1)??

if?not?os.path.exists(png_filename):??

print?'error:?png?file?doesn\'t?exist.'??

sys.exit(1)??

if?output_dir?is?not?None?and?not?os.path.isdir(output_dir):??

print?'error:?%s?is?no?an?valid?directory?or?doesn\'t?exist.'?%?output_dir??

sys.exit(1)??


????plist_parser?=?PlistParser(plist_filename,?png_filename,?output_dir)??

????plist_parser.split_png_from_plist()??

print?'OK!?For?more,qq-group:222670733'??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狂打,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子混弥,更是在濱河造成了極大的恐慌趴乡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝗拿,死亡現(xiàn)場離奇詭異晾捏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哀托,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門惦辛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仓手,你說我怎么就攤上這事胖齐。” “怎么了嗽冒?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵呀伙,是天一觀的道長。 經(jīng)常有香客問我添坊,道長剿另,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任贬蛙,我火速辦了婚禮雨女,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阳准。我一直安慰自己氛堕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布野蝇。 她就那樣靜靜地躺著岔擂,像睡著了一般位喂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乱灵,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天塑崖,我揣著相機(jī)與錄音,去河邊找鬼痛倚。 笑死规婆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝉稳。 我是一名探鬼主播抒蚜,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼耘戚!你這毒婦竟也來了嗡髓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤收津,失蹤者是張志新(化名)和其女友劉穎饿这,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撞秋,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡长捧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了吻贿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片串结。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舅列,靈堂內(nèi)的尸體忽然破棺而出肌割,到底是詐尸還是另有隱情,我是刑警寧澤帐要,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布把敞,位于F島的核電站,受9級特大地震影響宠叼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜其爵,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一冒冬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摩渺,春花似錦简烤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挥萌。三九已至,卻和暖如春枉侧,著一層夾襖步出監(jiān)牢的瞬間引瀑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工榨馁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留憨栽,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓翼虫,卻偏偏與公主長得像屑柔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子珍剑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容