cocos2dx 游戏plist与png完美切成小图python代码

python

  首先需要一份python的切图程序:

  1 #python2.5 unpack_plist.py birdfly 

2

3

4 #! /usr/lical/bin/python

5 import os,sys

6 from xml.etree import ElementTree

7 from PIL import Image

8

9 def tree_to_dict(tree):

10 d = {}

11 for index, item in enumerate(tree):

12 if item.tag == 'key':

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

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

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

16 d[item.text] = True

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

18 d[item.text] = False

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

20 d[item.text] = tree_to_dict(tree[index+1])

21 return d

22

23 def gen_png_from_plist(plist_filename, png_filename):

24 file_path = plist_filename.replace('.plist', '')

25 big_image = Image.open(png_filename)

26 root = ElementTree.fromstring(open(plist_filename, 'r').read())

27 plist_dict = tree_to_dict(root[0])

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

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

30 print "-----start\n----------"

31 rectlist = to_list(v['frame'])

32 print rectlist, "--------rectlist"

33 width = int( rectlist[3] if v['rotated'] else rectlist[2] )

34 height = int( rectlist[2] if v['rotated'] else rectlist[3] )

35 print width,height,"----width,height"

36 box=(

37 int(rectlist[0]),

38 int(rectlist[1]),

39 int(rectlist[0]) + width,

40 int(rectlist[1]) + height,

41 )

42 # bos is start & end point

43 print box,"-----_box-"

44 print v['rotated'], "---rotated"

45

46 sizelist = [ int(x) for x in to_list(v['sourceSize'])]

47 rect_on_big = big_image.crop(box)

48 '''

49 result_image = Image.new('RGBA', sizelist, (0,0,0,0))

50 result_box=(

51 ( sizelist[0] - width )/2,

52 ( sizelist[1] - height )/2,

53 ( sizelist[0] + width )/2,

54 ( sizelist[1] + height )/2

55 )

56 result_image.paste(rect_on_big, result_box, mask=0)

57 if v['rotated']:

58 result_image = result_image.rotate(90)

59 if not os.path.isdir(file_path):

60 os.mkdir(file_path)

61 outfile = (file_path+'/' + k).replace('gift_', '')

62 print result_box,"-----result_box-"

63 print outfile, "generated"

64 # result_image.save(outfile)

65 '''

66

67 if v['rotated']:

68 # rect_on_big = rect_on_big.rotate(90)

69 rect_on_big = rect_on_big.transpose(Image.ROTATE_90)

70

71 # result_image = Image.new('RGBA', sizelist, (0,0,0,0))

72 # if v['rotated']:

73 # result_box=(

74 # ( sizelist[0] - height )/2,

75 # ( sizelist[1] - width )/2,

76 # ( sizelist[0] + height )/2,

77 # ( sizelist[1] + width )/2

78 # )

79 # else:

80 # result_box=(

81 # ( sizelist[0] - width )/2,

82 # ( sizelist[1] - height )/2,

83 # ( sizelist[0] + width )/2,

84 # ( sizelist[1] + height )/2

85 # )

86 # result_image.paste(rect_on_big, result_box, mask=0)

87

88 if not os.path.isdir(file_path):

89 os.mkdir(file_path)

90 outfile = (file_path+'/' + k).replace('gift_', '')

91 rect_on_big.save(outfile);

92

93 if __name__ == '__main__':

94 filename = sys.argv[1]

95 plist_filename = filename + '.plist'

96 png_filename = filename + '.png'

97 if (os.path.exists(plist_filename) and os.path.exists(png_filename)):

98 gen_png_from_plist( plist_filename, png_filename )

99 else:

100 print "make sure you have boith plist and png files in the same directory"

Mac 电脑下可以新建一个文本把程序复制进去,保存后缀名为 .py 并移至与需要切的plist与png文件夹下。

以上是 cocos2dx 游戏plist与png完美切成小图python代码 的全部内容, 来源链接: utcz.com/z/388789.html

回到顶部