diff options
Diffstat (limited to 'third_party/freetype-py/examples/wordle.py')
-rw-r--r-- | third_party/freetype-py/examples/wordle.py | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/third_party/freetype-py/examples/wordle.py b/third_party/freetype-py/examples/wordle.py deleted file mode 100644 index 249f86d..0000000 --- a/third_party/freetype-py/examples/wordle.py +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# ----------------------------------------------------------------------------- -# -# FreeType high-level python API - Copyright 2011 Nicolas P. Rougier -# Distributed under the terms of the new BSD license. -# -# ----------------------------------------------------------------------------- -import math -import numpy as np -from freetype import * -import matplotlib.pyplot as plt - - -def make_label(text, filename, size=12, angle=0): - ''' - Parameters: - ----------- - text : string - Text to be displayed - filename : string - Path to a font - size : int - Font size in 1/64th points - angle : float - Text angle in degrees - ''' - face = Face(filename) - face.set_char_size( size*64 ) - angle = (angle/180.0)*math.pi - matrix = FT_Matrix( (int)( math.cos( angle ) * 0x10000L ), - (int)(-math.sin( angle ) * 0x10000L ), - (int)( math.sin( angle ) * 0x10000L ), - (int)( math.cos( angle ) * 0x10000L )) - flags = FT_LOAD_RENDER - pen = FT_Vector(0,0) - FT_Set_Transform( face._FT_Face, byref(matrix), byref(pen) ) - previous = 0 - xmin, xmax = 0, 0 - ymin, ymax = 0, 0 - for c in text: - face.load_char(c, flags) - kerning = face.get_kerning(previous, c) - previous = c - bitmap = face.glyph.bitmap - pitch = face.glyph.bitmap.pitch - width = face.glyph.bitmap.width - rows = face.glyph.bitmap.rows - top = face.glyph.bitmap_top - left = face.glyph.bitmap_left - pen.x += kerning.x - x0 = (pen.x >> 6) + left - x1 = x0 + width - y0 = (pen.y >> 6) - (rows - top) - y1 = y0 + rows - xmin, xmax = min(xmin, x0), max(xmax, x1) - ymin, ymax = min(ymin, y0), max(ymax, y1) - pen.x += face.glyph.advance.x - pen.y += face.glyph.advance.y - - L = np.zeros((ymax-ymin, xmax-xmin),dtype=np.ubyte) - previous = 0 - pen.x, pen.y = 0, 0 - for c in text: - face.load_char(c, flags) - kerning = face.get_kerning(previous, c) - previous = c - bitmap = face.glyph.bitmap - pitch = face.glyph.bitmap.pitch - width = face.glyph.bitmap.width - rows = face.glyph.bitmap.rows - top = face.glyph.bitmap_top - left = face.glyph.bitmap_left - pen.x += kerning.x - x = (pen.x >> 6) - xmin + left - y = (pen.y >> 6) - ymin - (rows - top) - data = [] - for j in range(rows): - data.extend(bitmap.buffer[j*pitch:j*pitch+width]) - if len(data): - Z = np.array(data,dtype=np.ubyte).reshape(rows, width) - L[y:y+rows,x:x+width] |= Z[::-1,::1] - pen.x += face.glyph.advance.x - pen.y += face.glyph.advance.y - - return L - - -if __name__ == '__main__': - from PIL import Image - - n_words = 100 - H, W, dpi = 600, 800, 72.0 - I = np.zeros((H, W, 3), dtype=np.ubyte) - S = np.random.normal(0,1,n_words) - S = (S-S.min())/(S.max()-S.min()) - S = np.sort(1-np.sqrt(S))[::-1] - sizes = (12 + S*48).astype(int).tolist() - - def spiral(): - eccentricity = 1.5 - radius = 8 - step = 0.1 - t = 0 - while True: - t += step - yield eccentricity*radius*t*math.cos(t), radius*t*math.sin(t) - - fails = 0 - for size in sizes: - angle = np.random.randint(-25,25) - L = make_label('Hello', './Vera.ttf', size, angle=angle) - h,w = L.shape - if h < H and w < W: - x0 = W//2 + (np.random.uniform()-.1)*50 - y0 = H//2 + (np.random.uniform()-.1)*50 - for dx,dy in spiral(): - c = .25+.75*np.random.random() - x = int(x0+dx) - y = int(y0+dy) - if x <= w//2 or y <= h//2 or x >= (W-w//2) or y >= (H-h//2): - fails += 1 - break - if (I[y-h//2:y-h//2+h, x-w//2:x-w//2+w,0] * L).sum() == 0: - I[y-h//2:y-h//2+h, x-w//2:x-w//2+w,0] |= (c * L).astype(int) - I[y-h//2:y-h//2+h, x-w//2:x-w//2+w,1] |= (c * L).astype(int) - I[y-h//2:y-h//2+h, x-w//2:x-w//2+w,2] |= (c * L).astype(int) - break - - print "Number of fails:", fails - fig = plt.figure(figsize=(W/dpi,H/dpi), dpi=dpi) - ax = fig.add_axes([0,0,1,1], frameon=False) - ax.imshow(I, interpolation='nearest', cmap=plt.cm.gray, origin='upper') - #plt.axis('off') - plt.show() - I = Image.fromarray(I[::-1,::1,::1], mode='RGB') - I.save('wordle.png') |