Source code for jasy.asset.sprite.Sheet

#
# Jasy - Web Tooling Framework
# Copyright 2010-2012 Zynga Inc.
# Copyright 2013-2014 Sebastian Werner
#

from jasy import UserError
import jasy.core.Console as Console

# Make PIL (native module) optional
try:
    from PIL import Image
    from PIL import ImageDraw
    Console.debug("Using Pillow (PIL)")

except ImportError as err1:

    Image = None
    ImageDraw = None
    Console.debug("No support for Pillow (PIL)!")


[docs]class SpriteSheet(): def __init__(self, packer, blocks): self.packer = packer self.width = packer.root.w self.height = packer.root.h self.blocks = blocks self.area = self.width * self.height self.usedArea = sum([s.w * s.h for s in blocks]) self.used = (100 / self.area) * self.usedArea def __len__(self): return len(self.blocks)
[docs] def export(self): data = {} for block in self.blocks: info = block.toJSON() data[block.image.relPath] = info for d in block.duplicates: data[d.relPath] = info return data
[docs] def write(self, filename, debug=False): if Image is None: raise UserError("Missing Python PIL which is required to create sprite sheets!") img = Image.new('RGBA', (self.width, self.height)) draw = ImageDraw.Draw(img) # Load images and pack them in for block in self.blocks: res = Image.open(block.image.src) x, y = block.fit.x, block.fit.y img.paste(res, (x, y)) del res if debug: x, y, w, h = block.fit.x, block.fit.y, block.w, block.h draw.rectangle((x, y, x + w, y + h), outline=(255, 0, 0, 255)) if debug: for i, block in enumerate(self.packer.getUnused()): x, y, w, h = block.x, block.y, block.w, block.h draw.rectangle((x, y, x + w, y + h), fill=(255, 255, 0, 255)) img.save(filename)