枕头:将spritesheet分割成单独的图像

时间:2016-12-06 22:42:03

标签: python pillow

我有一个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, 30480, 2910

编辑:放入问题所在,意外删除之前。我的问题是这个代码获取每个单独的精灵,但似乎是以完全随机的顺序进行,例如列表中的#384,由于某种原因被保存为#32,#10被保存为#1

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)的内容,以便您的图标在您的图标中正确排序文件管理器。只有两个小挑剔。