2012-07-10 15 views
8

Tengo problemas para dibujar texto multilingüe usando PIL. Digamos que quiero dibujar texto - "ひ ら が H - Hiragana, 히라가나". Pero la función ImageDraw.text() de PIL toma solo una fuente a la vez, por lo que no puedo dibujar este texto correctamente, ya que requiere fuentes inglesas, japonesas y coreanas juntas.Dibujar texto multilingüe usando PIL

Hasta ahora, no tuve la suerte de encontrar una solución simple, como pasar varias fuentes a PIL, para que pueda elegir la fuente adecuada para cada carácter Unicode (como el moderno SDK o los navegadores web).

Lo que estoy pensando es, debería repetir sobre cada personaje, y determinar qué fuente utilizar para cada personaje por mí mismo. Pero no puedo evitar pensar que debe haber una manera más fácil de hacer esto.

¿Voy en la dirección correcta? ¿No hay una manera más fácil?

PS) Está bien utilizar otro idioma u otra biblioteca de imágenes si hay una solución mucho mejor.

Respuesta

9

Solo tiene que elegir una fuente Unicode. Ejemplo:

import Image 
import ImageFont, ImageDraw 
image=Image.new("RGB",[320,320]) 
draw = ImageDraw.Draw(image) 
a=u"ひらがな - Hiragana, 히라가나" 
font=ImageFont.truetype("/Library/Fonts/Arial Unicode.ttf",14) 
draw.text((50, 50), a, font=font) 
image.save("a.png") 

Outputs this

+1

Sí, me acabo de descubrir que hay fuentes que pueden cubrir varios glifos Unicode. Pero lo que realmente quería hacer era aplicar diferentes fuentes para diferentes idiomas. (Mejor fuente elegida para cada idioma) Por ahora, estoy usando [ttfquery] (http://ttfquery.sourceforge.net/) para verificar si el glifo de unicode está contenido en una fuente determinada o no. Gracias por tu respuesta. – redism

+0

Probablemente podría acelerar las cosas, si tiene mucho texto para dibujar, extrayendo familias de idiomas de sus cadenas y consultando un carácter para cada familia de idiomas. – dda

+0

Gracias por señalar lo que no sabía. :) – redism