2012-07-10 1 views
8

Je n'arrive pas à dessiner du texte multilingue à l'aide de PIL. Disons que je veux dessiner du texte - "ひ ら が な - Hiragana, 히라가나". Mais la fonction ImageDraw.text() de PIL ne prend qu'une seule police à la fois, donc je ne peux pas dessiner ce texte correctement, car il nécessite des polices anglaises, japonaises et coréennes. Jusqu'ici, je n'ai pas eu de chance de trouver une solution simple comme de passer plusieurs polices à PIL, afin de pouvoir choisir la police appropriée pour chaque caractère Unicode (comme le fait le SDK moderne ou les navigateurs Web). Ce que je pense est, je devrais itérer sur chaque caractère, et déterminer quelle police à utiliser pour chaque caractère par moi-même. Mais je ne peux m'empêcher de penser qu'il doit y avoir un moyen plus facile de le faire.Dessin d'un texte multilingue à l'aide de PIL

Est-ce que je vais dans la bonne direction? N'y a-t-il pas un moyen plus facile? PS) Il est possible d'utiliser une autre langue ou une autre bibliothèque d'imagerie s'il existe une bien meilleure solution.

Répondre

9

Vous avez juste besoin de choisir une police Unicode. Exemple:

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

Oui, je viens de comprendre qu'il ya des polices qui peuvent couvrir beaucoup de glyphes unicode. Mais ce que je voulais vraiment faire était d'appliquer différentes polices pour différentes langues. (Meilleure police choisie pour chaque langue) Pour l'instant, j'utilise [ttfquery] (http://ttfquery.sourceforge.net/) pour vérifier si le glyphe de chaque unicode est contenu dans une certaine police ou non. Merci pour votre réponse. – redism

+0

Vous pourriez probablement accélérer les choses - si vous avez beaucoup de texte à dessiner - en extrayant des familles de langues de vos chaînes et en interrogeant un caractère pour chaque famille de langues. – dda

+0

Merci d'avoir signalé ce que je ne savais pas. :) – redism