EDIT: aggiunto esempio funzionante completoPython libreria di immagini - posizionamento carattere
Ho il seguente programma:
from PIL import Image, ImageDraw, ImageFont
FULL_SIZE = 50
filename = 'font_test.png'
font="/usr/share/fonts/truetype/msttcorefonts/arial.ttf"
text="5"
image = Image.new("RGBA", (FULL_SIZE, FULL_SIZE), color="grey")
draw = ImageDraw.Draw(image)
font = ImageFont.truetype(font, 40)
font_width, font_height = font.getsize(text)
draw.rectangle(((0, 0), (font_width, font_height)), fill="black")
draw.text((0, 0), text, font=font, fill="red")
image.save(filename, "PNG")
Ciò genera la seguente immagine:
E ' sembra che durante la scrittura del testo la libreria PIL aggiunga un margine in alto. Questo margine dipende dal tipo di carattere che uso.
Come posso tenerne conto quando si tenta di posizionare il testo (lo voglio nel mezzo di un rettangolo)?
(Usare Python 2.7.6 con il cuscino 2.3.0 su Ubuntu 14.04)
Fornire un programma ** completo ** che mostri l'errore, comprese eventuali istruzioni 'import'. –
L'unica ragione ragionevole che posso immaginare è che Open Sans utilizzava le figure proporzionali, nel qual caso il margine sarebbe la differenza tra l'altezza x e l'ascesa, nel qual caso dovrebbe essere lì. La ragione meno sana è che per qualche ragione, la dimensione di una sequenza di testo in PIL ha aggiunto una sorta di "offset": https://pillow.readthedocs.org/en/3.0.x/_modules/PIL /ImageFont.html. Forse questa è la differenza che stai vedendo? Non spiegherei perché il rettangolo nero non si estende dietro l'intera lettera però. – millimoose
Aggiunto un esempio operativo completo. – Filip