From 6288ab0e5cb200f3c637bd3e98042aa1283fd47c Mon Sep 17 00:00:00 2001 From: Victor Westerlund Date: Mon, 23 Nov 2020 18:09:00 +0100 Subject: [PATCH] Package 1.0.6 Added pip package support --- build/lib/pysheeter/PySheeter.py | 68 ++++++++++++++++ build/lib/pysheeter/__init__.py | 0 dist/pysheeter-1.0.6-py3-none-any.whl | Bin 0 -> 15333 bytes dist/pysheeter-1.0.6.tar.gz | Bin 0 -> 2651 bytes pysheeter.egg-info/PKG-INFO | 104 ++++++++++++++++++++++++ pysheeter.egg-info/SOURCES.txt | 9 ++ pysheeter.egg-info/dependency_links.txt | 1 + pysheeter.egg-info/requires.txt | 1 + pysheeter.egg-info/top_level.txt | 1 + pysheeter/__init__.py | 1 - setup.py | 2 +- 11 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 build/lib/pysheeter/PySheeter.py create mode 100644 build/lib/pysheeter/__init__.py create mode 100644 dist/pysheeter-1.0.6-py3-none-any.whl create mode 100644 dist/pysheeter-1.0.6.tar.gz create mode 100644 pysheeter.egg-info/PKG-INFO create mode 100644 pysheeter.egg-info/SOURCES.txt create mode 100644 pysheeter.egg-info/dependency_links.txt create mode 100644 pysheeter.egg-info/requires.txt create mode 100644 pysheeter.egg-info/top_level.txt 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 0000000000000000000000000000000000000000..14bf6c5d175211fcd4a79151b96ccf159bd811eb GIT binary patch literal 15333 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 literal 0 HcmV?d00001 diff --git a/dist/pysheeter-1.0.6.tar.gz b/dist/pysheeter-1.0.6.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..6a0e7d0457e4de0fddd75f01b1c6344ee2d4f3b9 GIT binary patch literal 2651 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 JM6v*Q008}VNq_(V literal 0 HcmV?d00001 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",