Voici une bidouille qui fonctionne bien pour moi. C'est une variante de la réponse de gnud. (Assez différent pour mériter une réponse séparée par rapport à un commentaire que j'espère.) J'ai testé beaucoup de placements de mots et cela a toujours fonctionné.
Lorsqu'un texte est dessiné sans atteindre la hauteur totale de la police, un écrêtage peut se produire. Comme l'a noté gnud, en utilisant des caractères tels que "Aj" (j'utilise "Fj"), vous évitez ce bug.
Chaque fois qu'un mot est placé:
1) Faites un draw.textsize (texte, police = police) avec votre mot désiré. Stocker la hauteur/largeur.
2) Ajouter 'Fj' (spaceFJ) à la fin du mot, et refaire la taille et mémoriser la troisième hauteur/largeur.
4) Vous ferez le tirage de texte avec le mot de l'article 2 (avec le 'Fj' à la fin). Avoir cet addendum maintiendra la police d'être coupée.
4) Avant de dessiner le texte, rognez l'image où le 'Fj' atterrira (crop.load() est requis pour éviter une copie paresseuse). Dessinez ensuite le texte et passez l'image recadrée sur le 'Fj'.
Ce processus évite l'écrêtage, semble raisonnablement performant et génère le texte complet non découpé. Voici un copier/coller d'une section de code Python que j'utilise pour cela. Exemple partiel, mais j'espère que cela ajoute un peu de perspicacité.
# note: xpos & ypos were previous set = coordinates for text draw
# the hard-coded addition of 4 to c_x likely will vary by font
# (I only use one font in this process, so kludged it.)
width, height = draw.textsize(word, font=font)
word2 = word + ' Fj'
width2, height2 = draw.textsize(word2, font=font)
# crop to overwrite ' Fj' with previous image bits
c_w = width2 - width
c_h = height2
c_x = xpos + width + 4
c_y = ypos
box = (c_x, c_y, c_x + c_w, c_y + c_h)
region = img.crop(box)
region.load()
draw.text((xpos, ypos), word2, (0,0,0), font=font)
img.paste(region, box)
Mieux nous dire les polices que vous avez essayées, et sur quelle plateforme vous vous trouvez. Je viens d'essayer ici sur Win7 avec consola.ttf et ne pas obtenir l'écrasement d'arrière-plan que vous voyez. –
Malheureusement, je n'ai pas VeraSe.ttf ici, et vous n'avez pas encore indiqué sur quelle plateforme vous vous trouvez. Je soupçonne Linux, pas Windows, et que c'est un problème spécifique à la plate-forme que vous rencontrez. –
Cela se passe aussi pour moi avec georgia.ttf (partie du paquet msttcorefonts) en utilisant PIL 1.1.7 sur Python 2.6 dans Ubuntu 9.10. Il semble que ce soit un problème avec PIL où n'importe quel tampon rendu temporairement n'est pas assez élevé. –