Bonjour,

Mes recherches en lignes sont restées vaines sur le sujet que j'expose ci-dessous, peut-être aurai-je plus de chance sur ce site:

Mon objectif est de connaître la taille de la zone occupée par un texte écrit dans une police donnée. Lorsque ce texte tient en une seule ligne la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ImageFont.truetype(..).getbbox(mon_texte)
fait parfaitement le job. Il y a problème lorsque le texte doit s'étirer sur plusieurs lignes.
L'exemple ci-dessous illustre ma question:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
texte = "Extrait de: The Zen of Python, by Tim Peters. Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!"
wrapped_lines = textwrap.wrap(texte,width=40) # Par défaut width = 70 caractères
wrapped_lines = "\n".join(wrapped_lines)
fonte_ttf = "arial.ttf"
fonte= str(rep_font / fonte_ttf)
size = 20
police = ImageFont.truetype(fonte, size = size)
left, top, right, bottom = police.getbbox(str(wrapped_lines))
w = right - left
h = bottom - top
print(w,h,str(wrapped_lines))
La dimension retournée pour la zone d'écriture est longue de la totalité des caractères du texte wrapped_lines et haute d'une seul ligne.
Je ne sais pas si le module ImageFont est le module approprié pour cette question ou si je ne connais pas une de ses fonctionnalités qui permettraient de la traiter. Peut-être faut-il avoir recours à un autre module ?

Quelqu'un a-t-il une idée ?

Merci d'avance.

CAPLANDE