diff --git a/build/lib/pysheeter/PySheeter.py b/build/lib/pysheeter/PySheeter.py new file mode 100644 index 0000000..9d3509a --- /dev/null +++ b/build/lib/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 diff --git a/build/lib/pysheeter/__init__.py b/build/lib/pysheeter/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dist/pysheeter-1.0.6-py3-none-any.whl b/dist/pysheeter-1.0.6-py3-none-any.whl new file mode 100644 index 0000000..14bf6c5 Binary files /dev/null and b/dist/pysheeter-1.0.6-py3-none-any.whl differ diff --git a/dist/pysheeter-1.0.6.tar.gz b/dist/pysheeter-1.0.6.tar.gz new file mode 100644 index 0000000..6a0e7d0 Binary files /dev/null and b/dist/pysheeter-1.0.6.tar.gz differ diff --git a/pysheeter.egg-info/PKG-INFO b/pysheeter.egg-info/PKG-INFO new file mode 100644 index 0000000..92e05f7 --- /dev/null +++ b/pysheeter.egg-info/PKG-INFO @@ -0,0 +1,104 @@ +Metadata-Version: 2.1 +Name: pysheeter +Version: 1.0.6 +Summary: Lightweight Python-script to create sprite sheets from transparent PNGs with Pillow +Home-page: https://github.com/VictorWesterlund/pysheeter +Author: VicW +Author-email: victor.vesterlund@gmail.com +License: UNKNOWN +Description: # PySheeter + Lightweight Pillow Python-script to create and scale sprite sheets from PNGs in folders or individually + + ## Get started / Basic usage + 1. Download and install [Python 3](https://www.python.org/downloads/) for your architecture + 2. Install the latest version of PySheeter with [`pip3`](https://pypi.org/project/pysheeter-VicW/) + ```bash + $ pip3 install pysheeter-VicW + ``` + ### Sprite sheet from folder + 1. Import `Sheet` from `pysheeter` + ```python + from pysheeter import Sheet + ``` + 2. Initialize the class with a path to your PNG-folder + ```python + spritesheet = pysheeter.Sheet("example/") + ``` + 3. Create a sprite sheet with `put()` + ```python + spritesheet.put("example_v1616.png",(16,16)) + # Creates a vertical spritesheet named 'example_v1616.png' with the dimensions 16x16px (scaled automatically) + ``` + + __Example usage:__ + ```python + # from 'example.py' + 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) + ``` + ![Example 1](https://storage.googleapis.com/public.victorwesterlund.com/github/VictorWesterlund/pysheeter/1example_v1616.png) + ![Example 2](https://storage.googleapis.com/public.victorwesterlund.com/github/VictorWesterlund/pysheeter/1example_h1632.png) + ### Sprite sheet from individual PNG-images + 1. Import `Sheet` from `pysheeter` + ```python + from pysheeter import Sheet + ``` + 2. Initialize the class without any arguments + ```python + spritesheet = pysheeter.Sheet() + ``` + 3. Add PNG-images with `add()` + ```python + spritesheet.add("example/1.png") + spritesheet.add("example/2.png") + spritesheet.add("example/3.png") + ... + ``` + 4. Remove PNG-images with `remove()` + ```python + spritesheet.remove("example/2.png") + ``` + 5. Create a sprite sheet with `put()` + ```python + spritesheet.put("example_v1616.png",(16,16)) + # Creates a vertical spritesheet named 'example_v1616.png' with the dimensions 16x16px (scaled automatically) + ``` + + __Example usage:__ + ```python + from pysheeter import PySheeter + + # Load sprites from 'example/' + spritesheet = PySheeter.Sheet() + + # Add PNG-images + spritesheet.add("example/1.png") + spritesheet.add("example/2.png") + spritesheet.add("example/3.png") + spritesheet.add("example/7.png") + spritesheet.add("example/5.png") + spritesheet.add("example/9.png") + + # 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) + ``` + ![Example 1](https://storage.googleapis.com/public.victorwesterlund.com/github/VictorWesterlund/pysheeter/2example_v1616.png) + ![Example 2](https://storage.googleapis.com/public.victorwesterlund.com/github/VictorWesterlund/pysheeter/2example_h1632.png) + +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Requires-Python: >=3.6 +Description-Content-Type: text/markdown diff --git a/pysheeter.egg-info/SOURCES.txt b/pysheeter.egg-info/SOURCES.txt new file mode 100644 index 0000000..f290505 --- /dev/null +++ b/pysheeter.egg-info/SOURCES.txt @@ -0,0 +1,9 @@ +README.md +setup.py +pysheeter/PySheeter.py +pysheeter/__init__.py +pysheeter.egg-info/PKG-INFO +pysheeter.egg-info/SOURCES.txt +pysheeter.egg-info/dependency_links.txt +pysheeter.egg-info/requires.txt +pysheeter.egg-info/top_level.txt \ No newline at end of file diff --git a/pysheeter.egg-info/dependency_links.txt b/pysheeter.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/pysheeter.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/pysheeter.egg-info/requires.txt b/pysheeter.egg-info/requires.txt new file mode 100644 index 0000000..7e2fba5 --- /dev/null +++ b/pysheeter.egg-info/requires.txt @@ -0,0 +1 @@ +Pillow diff --git a/pysheeter.egg-info/top_level.txt b/pysheeter.egg-info/top_level.txt new file mode 100644 index 0000000..bda3abb --- /dev/null +++ b/pysheeter.egg-info/top_level.txt @@ -0,0 +1 @@ +pysheeter diff --git a/pysheeter/__init__.py b/pysheeter/__init__.py index 71b6260..e69de29 100644 --- a/pysheeter/__init__.py +++ b/pysheeter/__init__.py @@ -1 +0,0 @@ -import PySheeter \ No newline at end of file diff --git a/setup.py b/setup.py index def5220..b005d80 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open("README.md","r") as fh: setuptools.setup( name="pysheeter", - version="1.0.5", + version="1.0.6", author="VicW", author_email="victor.vesterlund@gmail.com", description="Lightweight Python-script to create sprite sheets from transparent PNGs with Pillow",