枕头:将精灵表拆分为单独的图像

Pillow: splitting a spritesheet into seprate images

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

问题是您是逐列裁剪 spritesheet,而不是逐行裁剪。这意味着第二行的第一个 sprite 被裁剪为第二个而不是第 13 个。 Bulbasaur 实际上是您裁剪的第 98 个精灵。您需要切换 for 循环的顺序:

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

我建议您将 count 设置为 1,这样您的第一个图标将被编号为 1 而不是 0。您可能还想使用 str(count).zfill(4) 之类的东西,以便您的图标正确排序在你的文件管理器中。就是两个小毛病。