枕头:将精灵表拆分为单独的图像
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, 30
到 480, 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)
之类的东西,以便您的图标正确排序在你的文件管理器中。就是两个小毛病。
我有一个 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
问题是您是逐列裁剪 spritesheet,而不是逐行裁剪。这意味着第二行的第一个 sprite 被裁剪为第二个而不是第 13 个。 Bulbasaur 实际上是您裁剪的第 98 个精灵。您需要切换 for
循环的顺序:
for y in range(97):
for x in range(12):
...
我建议您将 count
设置为 1,这样您的第一个图标将被编号为 1 而不是 0。您可能还想使用 str(count).zfill(4)
之类的东西,以便您的图标正确排序在你的文件管理器中。就是两个小毛病。