Python切割图集
生活随笔
收集整理的這篇文章主要介紹了
Python切割图集
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用shoebox
官網地址: http://renderhjs.net/shoebox/
Json格式
# -*- coding: utf-8 -*-import os,sys import json import os import os.path from PIL import Imagedef json_to_dict(json_filename):json_file = open(json_filename, 'r')all_pic_dic = json.load(json_file)all_item_list = []for one_pic_item in all_pic_dic['res']:one_json_item = all_pic_dic['res'][one_pic_item]one_item = {}one_item['name'] = one_pic_item.strip().lstrip().rstrip(',')one_item['x'] = one_json_item['x']one_item['y'] = one_json_item['y']one_item['w'] = one_json_item['w']one_item['h'] = one_json_item['h']all_item_list.append(one_item)return all_item_listdef gen_png_from_json(folder_name, json_filename, png_filename):big_image = Image.open(png_filename)all_item_list = json_to_dict(json_filename)print 'gen_png_from_json:' + folder_name#清理掉原目錄if not os.path.isdir(folder_name):#os.removedirs(folder_name)os.mkdir(folder_name)for i, one_item_data in enumerate(all_item_list):file_name = one_item_data['name']x = one_item_data['x']y = one_item_data['y']w = one_item_data['w']h = one_item_data['h']#設置圖像裁剪區域 (x左上,y左上,x右下,y右下)image_box = [x, y, x + w , y + h ]one_pic = big_image.crop(image_box)one_pic.save(folder_name + "/" + file_name + '.png') # 存儲裁剪得到的圖像#print one_item_dataplist格式
# -*- co #!python import os,sys from xml.etree import ElementTree from PIL import Imagedef tree_to_dict(tree):d = {}for index, item in enumerate(tree):if item.tag == 'key':if tree[index+1].tag == 'string':d[item.text] = tree[index + 1].textelif tree[index + 1].tag == 'true':d[item.text] = Trueelif tree[index + 1].tag == 'false':d[item.text] = Falseelif tree[index+1].tag == 'dict':d[item.text] = tree_to_dict(tree[index+1])return ddef gen_png_from_plist(plist_filename, png_filename):file_path = plist_filename.replace('.plist', '')big_image = Image.open(png_filename)root = ElementTree.fromstring(open(plist_filename, 'r').read())plist_dict = tree_to_dict(root[0])to_list = lambda x: x.replace('{','').replace('}','').split(',')for k,v in plist_dict['frames'].items():rectlist = to_list(v['frame'])width = int( rectlist[3] if v['rotated'] else rectlist[2] )height = int( rectlist[2] if v['rotated'] else rectlist[3] )box=( int(rectlist[0]),int(rectlist[1]),int(rectlist[0]) + width,int(rectlist[1]) + height,)sizelist = [ int(x) for x in to_list(v['sourceSize'])]rect_on_big = big_image.crop(box)if v['rotated']:rect_on_big = rect_on_big.rotate(90)result_image = Image.new('RGBA', sizelist, (0,0,0,0))if v['rotated']:result_box=(( sizelist[0] - height )/2,( sizelist[1] - width )/2,( sizelist[0] + height )/2,( sizelist[1] + width )/2)else:result_box=(( sizelist[0] - width )/2,( sizelist[1] - height )/2,( sizelist[0] + width )/2,( sizelist[1] + height )/2)result_image.paste(rect_on_big, result_box, mask=0)if not os.path.isdir(file_path):os.mkdir(file_path)outfile = (file_path+'/' + k).replace('gift_', '')print outfile, "generated"result_image.save(outfile)注:依賴PIL,本文使用[Python Imaging Library 1.1.7 for Python 2.7]
官網 : http://www.pythonware.com/products/pil/
安裝完后執行
完整示例: https://github.com/l2xin/UnpackSpriteSheet
Github:https://github.com/l2xin
qq群:215974591,歡迎加群共同探討學習。
個人微信公眾號:牽蝸牛看世界
總結
以上是生活随笔為你收集整理的Python切割图集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java se 14 虚拟机规范
- 下一篇: 基于豆瓣哈哈哈哈哈哈小组的数据分析研究