2016-12-06 58 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