First commit of the library

This commit is contained in:
Samuele Santi 2013-12-01 14:20:35 +01:00
commit dd89e74d87
8 changed files with 155 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
*~
*.pyc
/.ropeproject
.\#*
/output/*

90
apyx/__init__.py Normal file
View File

@ -0,0 +1,90 @@
"""
Antipixels generator script
"""
from __future__ import print_function
import copy
from PIL import Image, ImageFont, ImageDraw
def create_antipixel(cfg):
font = ImageFont.truetype(cfg['base']['font_path'], size=8)
width, height = cfg['base']['size']
avail_space = width - 4 # padding: 2px on each side
image = Image.new('RGB', cfg['base']['size'])
draw = ImageDraw.Draw(image)
parts = copy.deepcopy(cfg['parts']) # so we can safely alter
##--------------------------------------------------
## Prepare sizing
even_parts = []
for part in parts:
part['text_width'] = draw.textsize(part['text'], font=font)[0]
part_sizing = part.get('sizing', 'even')
if part_sizing == 'even':
## Keep track as we'll need later..
even_parts.append(part)
elif part_sizing == 'fixed':
avail_space -= part['width']
else:
raise ValueError("Invalid sizing: " + part_sizing)
avail_space -= len(parts) # spacing
all_text_space = sum(x['text_width'] for x in even_parts)
if all_text_space > avail_space:
raise ValueError("Not enough space to fit text!")
for part in even_parts:
# Give space proportional
part['sizing'] = 'fixed'
part['width'] = int(round(1.0 * part['text_width'] *
avail_space / all_text_space))
##--------------------------------------------------
## Draw background
draw.rectangle(
[(0, 0), (image.size[0] - 1, image.size[1] - 1)],
outline=cfg['base']['outline'],
fill=cfg['base']['background'])
##--------------------------------------------------
## Draw rectangles, with text
# Vertical bounds
vmin, vmax = 2, image.size[1] - 3
# Horizontal offset
offset = 2
for part in parts:
draw.rectangle(
[(offset, vmin), (offset + part['width'], vmax)],
fill=part['background'])
text_align = part.get('align', 'center')
if text_align == 'left':
text_offset = 1
elif text_align == 'right':
text_offset = part['width'] - part['text_width']
elif text_align == 'center':
text_offset = round((part['width'] - part['text_width']) / 2.0)
else:
raise ValueError("Invalid alignment: " + text_align)
draw.text((offset + text_offset, vmin + 1),
part['text'], fill=part['color'], font=font)
offset += part['width']
offset += 1 # space between rectangles
##--------------------------------------------------
## Draw outline to make sure we clear overflows..
draw.rectangle(
[(0, 0), (image.size[0] - 1, image.size[1] - 1)],
outline=cfg['base']['outline'])
draw.rectangle(
[(1, 1), (image.size[0] - 2, image.size[1] - 2)],
outline=cfg['base']['background'])
return image

34
apyx/templates.py Normal file
View File

@ -0,0 +1,34 @@
"""
Some templates for common antipixel patterns
"""
def twoparts_even(text1, fg1, bg1, text2, fg2, bg2, a1='center', a2='center'):
return {
'parts': [
dict(text=text1, background=bg1, color=fg1, sizing='even',
align=a1),
dict(text=text2, background=bg2, color=fg2, sizing='even',
align=a2),
],
}
def twoparts_even_centered(text1, fg1, bg1, text2, fg2, bg2):
return twoparts_even(text1, fg1, bg1, text2, fg2, bg2, 'right', 'left')
def twoparts_even_altcolor(text1, text2, col1, col2):
return twoparts_even(text1, col2, col1, text2, col1, col2)
def twoparts_even_centered_altcolor(text1, text2, col1, col2):
return twoparts_even_centered(text1, col2, col1, text2, col1, col2)
def onepart(text, fg, bg):
return {
'parts': [
dict(text=text, background=bg, color=fg, sizing='even'),
],
}

BIN
fonts/slkscr.ttf Normal file

Binary file not shown.

BIN
fonts/slkscrb.ttf Normal file

Binary file not shown.

BIN
fonts/slkscre.ttf Normal file

Binary file not shown.

BIN
fonts/slkscreb.ttf Normal file

Binary file not shown.

26
setup.py Normal file
View File

@ -0,0 +1,26 @@
from setuptools import setup, find_packages
version = '0.1'
install_requires = [
'pillow',
]
setup(
name='APyX',
version=version,
packages=find_packages(),
url='http://rshk.github.io/apyx',
license='Apache License 2.0',
author='Samuele Santi',
author_email='samuele@samuelesanti.com',
description='Simple antipixel generation utility',
long_description='Simple antipixel generation utility',
install_requires=install_requires,
classifiers=[
"License :: OSI Approved :: Apache Software License",
"Development Status :: 3 - Alpha",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
],
package_data={'': ['README.md', 'LICENSE']})