diff --git a/PIL/ImageDraw.py b/PIL/ImageDraw.py index 9e154f236e3..f37b41557d9 100644 --- a/PIL/ImageDraw.py +++ b/PIL/ImageDraw.py @@ -267,15 +267,15 @@ def text(self, xy, text, fill=None, font=None, anchor=None): self.draw.draw_bitmap(xy, mask, ink) def multiline_text(self, xy, text, fill=None, font=None, anchor=None, - spacing=0, align="left"): - widths, heights = [], [] + spacing=4, align="left"): + widths = [] max_width = 0 lines = self._multiline_split(text) + line_spacing = self.textsize('A', font=font)[1] + spacing for line in lines: line_width, line_height = self.textsize(line, font) widths.append(line_width) max_width = max(max_width, line_width) - heights.append(line_height) left, top = xy for idx, line in enumerate(lines): if align == "left": @@ -287,7 +287,7 @@ def multiline_text(self, xy, text, fill=None, font=None, anchor=None, else: assert False, 'align must be "left", "center" or "right"' self.text((left, top), line, fill, font, anchor) - top += heights[idx] + spacing + top += line_spacing left = xy[0] ## @@ -305,11 +305,11 @@ def multiline_textsize(self, text, font=None, spacing=0): max_width = 0 height = 0 lines = self._multiline_split(text) + line_spacing = self.textsize('A', font=font)[1] + spacing for line in lines: line_width, line_height = self.textsize(line, font) - height += line_height + spacing max_width = max(max_width, line_width) - return max_width, height + return max_width, len(lines)*line_spacing ## diff --git a/Tests/images/multiline_text_spacing.png b/Tests/images/multiline_text_spacing.png index 86907040729..3c3bc0f267d 100644 Binary files a/Tests/images/multiline_text_spacing.png and b/Tests/images/multiline_text_spacing.png differ diff --git a/_imagingft.c b/_imagingft.c index a34fb8af9b0..dc1661f3e70 100644 --- a/_imagingft.c +++ b/_imagingft.c @@ -492,6 +492,25 @@ font_getattr_descent(FontObject* self, void* closure) return PyInt_FromLong(-PIXEL(self->face->size->metrics.descender)); } +static PyObject* +font_getattr_height(FontObject* self, void* closure) +{ + return PyInt_FromLong(PIXEL(self->face->size->metrics.height)); +} + +static PyObject* +font_getattr_x_ppem(FontObject* self, void* closure) +{ + return PyInt_FromLong(self->face->size->metrics.x_ppem); +} + +static PyObject* +font_getattr_y_ppem(FontObject* self, void* closure) +{ + return PyInt_FromLong(self->face->size->metrics.y_ppem); +} + + static PyObject* font_getattr_glyphs(FontObject* self, void* closure) { @@ -503,6 +522,9 @@ static struct PyGetSetDef font_getsetters[] = { { "style", (getter) font_getattr_style }, { "ascent", (getter) font_getattr_ascent }, { "descent", (getter) font_getattr_descent }, + { "height", (getter) font_getattr_height }, + { "x_ppem", (getter) font_getattr_x_ppem }, + { "y_ppem", (getter) font_getattr_y_ppem }, { "glyphs", (getter) font_getattr_glyphs }, { NULL } };