diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..82f1e02 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +example_* \ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..acc8eac --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +from lib import PySheeter \ No newline at end of file diff --git a/example.py b/example.py new file mode 100644 index 0000000..3fec735 --- /dev/null +++ b/example.py @@ -0,0 +1,10 @@ +from pysheeter import PySheeter + +# Load sprites from 'example/' +spritesheet = PySheeter.Sheet("example") + +# Create a vertical spritesheet with the dimensions 16x16 +spritesheet.put("example_v1616.png",(16,16)) + +# Create a horizontal spritesheet with the dimensions 16x32 +spritesheet.put("example_h1632.png",(16,32),False) \ No newline at end of file diff --git a/example/1.png b/example/1.png new file mode 100644 index 0000000..0d6591b Binary files /dev/null and b/example/1.png differ diff --git a/example/2.png b/example/2.png new file mode 100644 index 0000000..536ccbc Binary files /dev/null and b/example/2.png differ diff --git a/example/3.png b/example/3.png new file mode 100644 index 0000000..abbb891 Binary files /dev/null and b/example/3.png differ diff --git a/example/4.png b/example/4.png new file mode 100644 index 0000000..17d2368 Binary files /dev/null and b/example/4.png differ diff --git a/example/5.png b/example/5.png new file mode 100644 index 0000000..ee6ad7f Binary files /dev/null and b/example/5.png differ diff --git a/example/6.png b/example/6.png new file mode 100644 index 0000000..ee6ad7f Binary files /dev/null and b/example/6.png differ diff --git a/example/7.png b/example/7.png new file mode 100644 index 0000000..ab7535e Binary files /dev/null and b/example/7.png differ diff --git a/example/8.png b/example/8.png new file mode 100644 index 0000000..ee6ad7f Binary files /dev/null and b/example/8.png differ diff --git a/example/9.png b/example/9.png new file mode 100644 index 0000000..3068c1b Binary files /dev/null and b/example/9.png differ diff --git a/pysheeter/PySheeter.py b/pysheeter/PySheeter.py new file mode 100644 index 0000000..9d3509a --- /dev/null +++ b/pysheeter/PySheeter.py @@ -0,0 +1,68 @@ +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(size) + + # Resize image without maintaining aspect ratio + def resize(self,size,resample=Image.LANCZOS): + self.image = self.image.resize((size[0],size[1]),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] + + print(f"Loaded {len(self.sprites)} sprites") + + # Concatinate sprites vertically + def concatV(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 + + # Concatinate sprites horizontally + def concatH(self,size): + sheet = Image.new("RGBA",(size[0] * len(self.sprites),size[1])) + + for i, sprite in enumerate(self.sprites): + sheet.paste(Sprite(sprite,size).image,(size[0] * i,0)) + + return sheet + + # Add sprite by path + def add(self,path): + self.sprites.append(path) + + # Remove sprite by path + def remove(self,path): + self.sprites.remove(path) + + # Create and save spritesheet + def put(self,dest,size,vertical = True): + if(vertical): + sheet = self.concatV(size) + else: + sheet = self.concatH(size) + + sheet.save(dest) + print(f"Saved spritesheet to '{dest}'") \ No newline at end of file