PIL corta la parte superior de las letras

He pasado mucho tiempo haciendo mi primera aplicación web usando Python, y estoy usando pil para generar imágenes. Después de leer mucho, logré implementar la alineación, el ajuste, la generación de archivos con muchas extensiones, etc.

Sin embargo, todo el texto generado por PIL se corta en la parte superior. Aquí hay una muestra.

Ejemplo de imagen generada por PIL con texto cortado en la parte superior

Debería decir ŻÓĆjygpq en una variedad de fonts (los nombres de las fonts están a la izquierda).

He encontrado algunas publicaciones aquí: recorte de fonts con PIL , pero me gustaría evitar usar otro módulo (aggdraw); ya que he descubierto tantas cosas en PIL ya me gustaría seguir con eso.

    He intentado muchas fonts en diferentes tamaños, pero el texto todavía está cortado. Incluso intenté usar fonts PIL, pero todavía no funciona. [También convierte OTF a BDF, y a PIL].

    Esto está en Ubuntu. ¿Qué debo intentar a continuación?

    Espero estar equivocado en este caso, pero la única solución correcta se basa en parchear cómo _imagingft.c representa el texto. PIL depende de FreeType para esta tarea, pero PIL parece estar calculando mal el posicionamiento. Además, la altura en getsize está sobreestimada (aunque eso no causa problemas). Por el momento, he puesto un parche para manejar estos problemas en: http://pastebin.com/jP2iLkDN (parece que hay una mejor manera de parchear el código de render).

    Aquí hay algunos ejemplos de la salida que obtengo sin el parche y con el parche, respectivamente:

    introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

    Resultados utilizando el código presente en la discusión enlazada. En OSX:

    introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

    En Ubuntu:

    introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

    Aquí está el código para generar las cifras más altas:

     # -*- encoding: utf8 -*- import sys import Image, ImageDraw, ImageFont im = Image.new("RGBA", (1000, 1000), 'white') draw = ImageDraw.Draw(im) start_y = 7 text = u'\u00d1\u00d3yŻ\u00d4Ćgp\u010c\u0137' for i in xrange(28, 46, 2): font = ImageFont.truetype('Junicode-Bold.ttf', i) width, height = font.getsize(text) draw.rectangle((0, start_y, width, height + start_y), outline='blue') draw.text((0, start_y), text, font=font, fill='black') start_y += height + 7 im.crop((0, 0, width + 1, start_y + 2)).save(sys.argv[1]) 

    Las cifras de abajo se generaron de acuerdo con el código presente en el tema vinculado al corte de partes del texto por parte de PIL.

    No es la mejor solución, pero veo que la gente ha resuelto esto al agregar un espacio inicial a su texto.