2016-12-06 64 views
0

我有每个40x30精灵一个spritesheet,和我想它分成从0-number_of_sprites枕头:拆分spritesheet到seprate图像

from PIL import Image 
from os import mkdir 

mkdir("assets/icons") 
sheet = Image.open("assets/icons.png") 
count = 0 

for x in range(12): 
    for y in range(97): 
     a = (x + 1) * 40 
     b = (y + 1) * 30 
     icon = sheet.crop((a - 40, b - 30, a, b)) # Problem here 
     icon.save("assets/icons/{}.png".format(count)) 
     count += 1 

而且问题命名蹦床网上单人精灵是我标记因此。 a, b的坐标是每个精灵的左上角和右上角,从40, 30480, 2910

编辑:放在问题出在哪里,意外删除它之前。我的问题是这个代码获取每个个人精灵,但似乎完全随机的顺序,例如#384名单上,由于某种原因保存为#32,#10作为#1

+0

你在哪里标记了问题。请[编辑]你的问题,并做到这一点(并增加对问题的解释会更好)。 – martineau

回答

0

问题是你裁剪你的spritesheet逐列而不是逐行。这意味着第二行中的第一个精灵会被第二次而不是第十三次裁剪。 Bulbasaur实际上是你收获的第98个精灵。你需要切换你for循环的顺序:

for y in range(97): 
    for x in range(12): 
     ... 

我建议你设置count为1,这样你的第一个图标将被编号1,而不是0。你可能也想使用类似str(count).zfill(4)使您的图标在您的文件管理器中正确排序。只是两个小挑剔。

+0

非常感谢!这确实是问题,作为旁注,我使用?图标,我想要口袋妖怪(大多数情况下,表单不会工作)被国家的dex#标签,所以我不从1开始。另外对我来说(thunar在linux上)#作品排序默认是 –

+0

不够公平。例如,如果您需要使用Python列出文件夹的内容并按顺序获取图标,那么填充数字仍然是一个好主意,但这取决于您的需求。 – fenceop