原图片(尺寸:200*200)
.plist 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>frames</key>
<dict>
<key>test_000.png</key>
<dict>
<key>frame</key>
<string>{{0,100},{100,100}}</string>
<key>offset</key>
<string>{0,0}</string>
<key>rotated</key>
<false/>
<key>sourceColorRect</key>
<string>{{0,0},{100,100}}</string>
<key>sourceSize</key>
<string>{100,100}</string>
</dict>
<key>test_001.png</key>
<dict>
<key>frame</key>
<string>{{100,100},{100,100}}</string>
<key>offset</key>
<string>{0,0}</string>
<key>rotated</key>
<false/>
<key>sourceColorRect</key>
<string>{{0,0},{100,100}}</string>
<key>sourceSize</key>
<string>{100,100}</string>
</dict>
<key>test_002.png</key>
<dict>
<key>frame</key>
<string>{{100,0},{100,100}}</string>
<key>offset</key>
<string>{0,0}</string>
<key>rotated</key>
<false/>
<key>sourceColorRect</key>
<string>{{0,0},{100,100}}</string>
<key>sourceSize</key>
<string>{100,100}</string>
</dict>
<key>test_003.png</key>
<dict>
<key>frame</key>
<string>{{0,0},{100,100}}</string>
<key>offset</key>
<string>{0,0}</string>
<key>rotated</key>
<false/>
<key>sourceColorRect</key>
<string>{{0,0},{100,100}}</string>
<key>sourceSize</key>
<string>{100,100}</string>
</dict>
</dict>
<key>metadata</key>
<dict>
<key>format</key>
<integer>2</integer>
<key>size</key>
<string>{200,200}</string>
<key>textureFileName</key>
<string>test.png</string>
</dict>
</dict>
</plist>
python 代码
import plistlib
from PIL import Image
def handle_image():
# 读取 .plist 文件
with open('test.plist', 'rb') as f:
plist_data = plistlib.load(f)
# 输出plist
print(plist_data['frames'])
# 打开原始图片
original_image = Image.open('test.png')
# 创建一个新的空白图片,用于合并结果
merged_image = Image.new('RGBA', (100 * 4, 100))
count = 0
last_x = -1
last_y = -1
for k, v in plist_data['frames'].items():
posi_str = str(v['frame']) # 获取表示位置的str
posi_rect = posi_str.replace('{', '').replace('}', '').split(',')
width = int(posi_rect[3] if v['rotated'] else posi_rect[2])
height = int(posi_rect[2] if v['rotated'] else posi_rect[3])
print("%s count: %d --- (%d : %d)" % (k, count, int(posi_rect[0]), int(posi_rect[1])))
x, y, width, height = int(posi_rect[0]), int(posi_rect[1]), width, height
if x == last_x and y == last_y:
continue
image_part = original_image.crop((x, y, x + width, y + height))
merged_image.paste(image_part, (count * 100, 0))
last_x = x
last_y = y
count += 1
# 保存合并后的图片
merged_image.save('merged_image_test.png')
if __name__ == '__main__':
# print_hi('PyCharm')
handle_image()
新图片