feifeifeiliu's picture
first version
865fd8a
raw
history blame
3.31 kB
#!/usr/bin/env python
# encoding: utf-8
# Copyright (c) 2013 Max Planck Society. All rights reserved.
import os
import numpy as np
from OpenGL.GL import glPixelStorei, \
glGenTextures, \
glBindTexture, \
glGenerateMipmap, \
glHint, \
glTexImage2D
from OpenGL.GL import GL_UNPACK_ALIGNMENT, \
GL_TEXTURE_2D, \
GL_RGB, \
GL_BGR, \
GL_GENERATE_MIPMAP_HINT, \
GL_NICEST, \
GL_UNSIGNED_BYTE
def get_image_with_text(text, fgcolor, bgcolor):
if not hasattr(get_image_with_text, 'cache'):
get_image_with_text.cache = {}
import zlib
uid = str(zlib.crc32(text)) + str(zlib.crc32(np.array(fgcolor))) + str(zlib.crc32(np.array(bgcolor)))
if uid not in get_image_with_text.cache:
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
font = ImageFont.truetype("/Library/Fonts/Courier New.ttf", 30)
imsize = (256, 256)
bgarray = np.asarray(np.zeros((imsize[0], imsize[1], 3)), np.uint8)
bgarray[:, :, 0] += bgcolor[0]
bgarray[:, :, 1] += bgcolor[1]
bgarray[:, :, 2] += bgcolor[2]
img = Image.fromarray(bgarray)
draw = ImageDraw.Draw(img)
w, h = draw.textsize(text, font=font)
text_pos = ((imsize[0] - w) / 2, (imsize[1] - h) / 2)
draw.text(text_pos, text, fill=fgcolor, font=font)
get_image_with_text.cache[uid] = np.array(img.getdata()).reshape(img.size[0], img.size[1], 3) * 255
return get_image_with_text.cache[uid]
def get_textureid_with_text(text, fgcolor, bgcolor):
if not hasattr(get_textureid_with_text, 'cache'):
get_textureid_with_text.cache = {}
import zlib
uid = str(zlib.crc32(text)) + str(zlib.crc32(np.array(fgcolor))) + str(zlib.crc32(np.array(bgcolor)))
if uid not in get_textureid_with_text.cache:
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
font = ImageFont.truetype(os.path.join(os.path.dirname(__file__),
"ressources",
"Arial.ttf"),
100)
imsize = (128, 128)
bgarray = np.asarray(np.zeros((imsize[0], imsize[1], 3)), np.uint8)
bgarray[:, :, 0] += bgcolor[0]
bgarray[:, :, 1] += bgcolor[1]
bgarray[:, :, 2] += bgcolor[2]
img = Image.fromarray(bgarray)
draw = ImageDraw.Draw(img)
w, h = draw.textsize(text, font=font)
text_pos = ((imsize[0] - w) / 2, (imsize[1] - h) / 2)
draw.text(text_pos, text, fill=tuple(np.asarray(fgcolor, np.uint8)), font=font)
texture_data = np.asarray(np.array(img.getdata()).reshape(img.size[0], img.size[1], 3) * 255, np.uint8)
textureID = glGenTextures(1)
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glBindTexture(GL_TEXTURE_2D, textureID)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture_data.shape[1], texture_data.shape[0], 0, GL_BGR, GL_UNSIGNED_BYTE, texture_data.flatten())
glHint(GL_GENERATE_MIPMAP_HINT, GL_NICEST) # must be GL_FASTEST, GL_NICEST or GL_DONT_CARE
glGenerateMipmap(GL_TEXTURE_2D)
get_textureid_with_text.cache[uid] = textureID
return get_textureid_with_text.cache[uid]