mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-26 01:46:18 +03:00
Fix rendered characters have been chipped for some TrueType fonts
ImageFont ignores descender value of TrueType fonts (uses ascender only), then some fonts which use descender is chipped on rendering.
This commit is contained in:
parent
8fc5fbc6c1
commit
103cf49c91
|
@ -282,7 +282,7 @@ font_render(FontObject* self, PyObject* args)
|
|||
{
|
||||
int i, x, y;
|
||||
Imaging im;
|
||||
int index, error, ascender;
|
||||
int index, error, ascender, descender;
|
||||
int load_flags;
|
||||
unsigned char *source;
|
||||
FT_ULong ch;
|
||||
|
@ -332,6 +332,7 @@ font_render(FontObject* self, PyObject* args)
|
|||
int xx, x0, x1;
|
||||
source = (unsigned char*) glyph->bitmap.buffer;
|
||||
ascender = PIXEL(self->face->size->metrics.ascender);
|
||||
descender = PIXEL(self->face->size->metrics.descender);
|
||||
xx = x + glyph->bitmap_left;
|
||||
x0 = 0;
|
||||
x1 = glyph->bitmap.width;
|
||||
|
@ -340,7 +341,7 @@ font_render(FontObject* self, PyObject* args)
|
|||
if (xx + x1 > im->xsize)
|
||||
x1 = im->xsize - xx;
|
||||
for (y = 0; y < glyph->bitmap.rows; y++) {
|
||||
int yy = y + ascender - glyph->bitmap_top;
|
||||
int yy = y + ascender + descender - glyph->bitmap_top;
|
||||
if (yy >= 0 && yy < im->ysize) {
|
||||
/* blend this glyph into the buffer */
|
||||
unsigned char *target = im->image8[yy] + xx;
|
||||
|
@ -361,6 +362,7 @@ font_render(FontObject* self, PyObject* args)
|
|||
int xx, x0, x1;
|
||||
source = (unsigned char*) glyph->bitmap.buffer;
|
||||
ascender = PIXEL(self->face->size->metrics.ascender);
|
||||
descender = PIXEL(self->face->size->metrics.descender);
|
||||
xx = x + glyph->bitmap_left;
|
||||
x0 = 0;
|
||||
x1 = glyph->bitmap.width;
|
||||
|
@ -369,7 +371,7 @@ font_render(FontObject* self, PyObject* args)
|
|||
if (xx + x1 > im->xsize)
|
||||
x1 = im->xsize - xx;
|
||||
for (y = 0; y < glyph->bitmap.rows; y++) {
|
||||
int yy = y + ascender - glyph->bitmap_top;
|
||||
int yy = y + ascender + descender - glyph->bitmap_top;
|
||||
if (yy >= 0 && yy < im->ysize) {
|
||||
/* blend this glyph into the buffer */
|
||||
int i;
|
||||
|
|
Loading…
Reference in New Issue
Block a user