我有一个spritesheet,每个精灵都是40x30,而我正试图把它分成以0-number_of_sprites
命名的单个精灵
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, 30
到480, 2910
编辑:放入问题所在,意外删除之前。我的问题是这个代码获取每个单独的精灵,但似乎是以完全随机的顺序进行,例如列表中的#384,由于某种原因被保存为#32,#10被保存为#1
答案 0 :(得分:1)
问题在于您逐列裁剪spritesheet列而不是逐行裁剪。这意味着第二行的第一个精灵被裁剪第二而不是第十三。 Bulbasaur实际上是你收获的第98个精灵。您需要切换for
循环的顺序:
for y in range(97):
for x in range(12):
...
我建议您将count
设置为1,这样您的第一个图标将被编号为1而不是0.您可能还想使用类似str(count).zfill(4)
的内容,以便您的图标在您的图标中正确排序文件管理器。只有两个小挑剔。