mirror of
https://codeberg.org/vlw/pysheeter.git
synced 2025-09-14 03:33:40 +02:00
61 lines
No EOL
1.4 KiB
Python
61 lines
No EOL
1.4 KiB
Python
import json
|
|
from PIL import Image
|
|
from pathlib import Path
|
|
|
|
# Create new sprite
|
|
class Sprite:
|
|
|
|
def __init__(self,image,size):
|
|
self.image = Image.open(image).convert("RGBA")
|
|
|
|
# Resize image to size[width,height] if nessesary
|
|
if(self.image.width != size[0] or self.image.height != size[1]):
|
|
self.resize()
|
|
|
|
# Resize image without maintaining aspect ratio
|
|
def resize(self,resample=Image.BICUBIC):
|
|
rw = self.image.width
|
|
rh = self.image.height
|
|
|
|
# Scale image width
|
|
if(rw != size[0]):
|
|
rw = int(self.image.height * self.image.width / size[0])
|
|
|
|
# Scale image height
|
|
if(rh != size[1]):
|
|
rh = int(self.image.width * size[1] / self.image.height)
|
|
|
|
self.image = self.image.resize((rw,rh),resample)
|
|
|
|
# --------------------------------
|
|
|
|
# Create new sheet of sprites
|
|
class Sheet:
|
|
|
|
def __init__(self,folder = None):
|
|
self.sprites = []
|
|
|
|
# Auto-import sprite folder
|
|
if(folder):
|
|
self.path = Path(folder).glob("**/*.png")
|
|
self.sprites = [x for x in self.path]
|
|
|
|
# Concatinate sprites vertically
|
|
def concat(self,size):
|
|
sheet = Image.new("RGBA",(size[0],size[1] * len(self.sprites)))
|
|
|
|
for i, sprite in enumerate(self.sprites):
|
|
sheet.paste(Sprite(sprite,size).image,(0,size[1] * i))
|
|
|
|
return sheet
|
|
|
|
# Add sprite by path
|
|
def add(self,path):
|
|
self.sprites.append(path)
|
|
|
|
# Create and save spritesheet
|
|
def put(self,dest,size):
|
|
sheet = self.concat(size)
|
|
sheet.save(dest)
|
|
|
|
print(len(self.sprites)) |