From 9fbd35fe87e16b9bded90b5c4682cfc86f5fe4d6 Mon Sep 17 00:00:00 2001 From: nulano Date: Wed, 27 May 2020 23:21:32 +0200 Subject: [PATCH 1/2] use mode for getsize --- src/PIL/ImageFont.py | 6 ++++-- src/_imagingft.c | 12 +++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/PIL/ImageFont.py b/src/PIL/ImageFont.py index 25ceaa16a..98b6ab66e 100644 --- a/src/PIL/ImageFont.py +++ b/src/PIL/ImageFont.py @@ -259,7 +259,7 @@ class FreeTypeFont: :return: (width, height) """ - size, offset = self.font.getsize(text, direction, features, language) + size, offset = self.font.getsize(text, False, direction, features, language) return ( size[0] + stroke_width * 2 + offset[0], size[1] + stroke_width * 2 + offset[1], @@ -468,7 +468,9 @@ class FreeTypeFont: :py:mod:`PIL.Image.core` interface module, and the text offset, the gap between the starting coordinate and the first marking """ - size, offset = self.font.getsize(text, direction, features, language) + size, offset = self.font.getsize( + text, mode == "1", direction, features, language + ) size = size[0] + stroke_width * 2, size[1] + stroke_width * 2 im = fill("L", size, 0) self.font.render( diff --git a/src/_imagingft.c b/src/_imagingft.c index 9fe189c5f..4f5456373 100644 --- a/src/_imagingft.c +++ b/src/_imagingft.c @@ -605,6 +605,8 @@ font_getsize(FontObject* self, PyObject* args) FT_Face face; int xoffset, yoffset; int horizontal_dir; + int mask = 0; + int load_flags; const char *dir = NULL; const char *lang = NULL; size_t i, count; @@ -614,11 +616,11 @@ font_getsize(FontObject* self, PyObject* args) /* calculate size and bearing for a given string */ PyObject* string; - if (!PyArg_ParseTuple(args, "O|zOz:getsize", &string, &dir, &features, &lang)) { + if (!PyArg_ParseTuple(args, "O|izOz:getsize", &string, &mask, &dir, &features, &lang)) { return NULL; } - count = text_layout(string, self, dir, features, lang, &glyph_info, 0); + count = text_layout(string, self, dir, features, lang, &glyph_info, mask); if (PyErr_Occurred()) { return NULL; } @@ -637,7 +639,11 @@ font_getsize(FontObject* self, PyObject* args) /* Note: bitmap fonts within ttf fonts do not work, see #891/pr#960 * Yifu Yu, 2014-10-15 */ - error = FT_Load_Glyph(face, index, FT_LOAD_DEFAULT|FT_LOAD_NO_BITMAP); + load_flags = FT_LOAD_NO_BITMAP; + if (mask) { + load_flags |= FT_LOAD_TARGET_MONO; + } + error = FT_Load_Glyph(face, index, load_flags); if (error) { return geterror(error); } From 2dd9324df210a60f663cd3c4d3795ee2457babc0 Mon Sep 17 00:00:00 2001 From: nulano Date: Mon, 1 Jun 2020 19:21:40 +0200 Subject: [PATCH 2/2] add mono color text test --- Tests/images/text_mono.gif | Bin 0 -> 1560 bytes Tests/test_imagefont.py | 17 +++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 Tests/images/text_mono.gif diff --git a/Tests/images/text_mono.gif b/Tests/images/text_mono.gif new file mode 100644 index 0000000000000000000000000000000000000000..b350c10e64a2f14c9220af9d49eca19a955431c5 GIT binary patch literal 1560 zcmXYwcRbZ!9LCQ@+`@HB%679uh-~E=Wy?tRDkCE!Nujz$5kgT((#W1_nk(MhphS#KeTfVvim@dhFOSW@hH&$B(nHu$(w?;^fJb ztgNhTY;5f8>>L~%oSd9oTwL7T+&nxyI2`WOsZ+eXynK9o{QUd^0s?}9f~TNIdU|?!d3k$#`}p|Wx^>If*Z21A+kSq2ckbNr_xHbh_wK!W_W}X}0s{ksf`abf zzyILDgNF|v5(tDxj~+dK{5Uu`I3y(G$&)8fpFRx@4Gjwmd-m*EczAe3L_}m{@$%)%*x1;(xVTrZUcG+(`pug+@$vC*-@Z*qNOC>mrpFgLkr)OkjWM*b&Wo2b&XXoVPDz7Yinz7Z|~^n=gww5 z?*8%PM^8^rZ*Om3UtfQJ|G>b&;NalU(9rPk@W{x>&!0a>M@PrT#>U6T$z<}cU%w_M zCMG8*fB*hXp-`r#rlzN-XJ%$*XJ_Z;=H}<;7Zw&47Z;b7mX?>7S5{V5S6Bc1`LnjR zw!Xf;v9Ynaxw*BqwY|N)v$ON}@88|s-MziN{r&xa|Ngh+AeE?8sPOUs* zbugM)#JVZ(V{IswPbX0;Ke;}Fm5mk+h$)Q#1;RMlaDWgiOicqw1x^G2uC*{=0ipdJ ziV6%iOXC5+2P4Dj-EdggrllyO=d)po&U>BW%)Tu1LbuTt7I)~X31@_^p+e{~Zz5bJ z_N1F++2$w`<_7?viPz@<1W@Wr4Y0%#FZjLDJQ#o{Og5nanpB|x04iCR4&VqI^Kf{u zgNv}WOsr}x*Bn<{uC8>tM6Z=6)82YFH3{9H2 z7|AB%j7XX>P{LVALFu$9B2ijlpSDzZWgt-jlDm3bAUOmB%ae>!5zcV$tVz02nn9Xn z-<)Z-MX@JkxNqJp&!Ij_z^Z@2qR6!`*J-4G(W=ykq6S@fPys`u0ghw`i_riqNfP#< z0_ZMQ7!U<$hzzhQlssqw4#q%fz*~U5Kn5(2*a!c&-vniT%TuEqct8dr^h}1F`=r%L zR2;Q^hcd|*bf?e}F{JVhFog0L=O!tE6*6@sond7VSO>jXOkLch!0lB^XEYBiwzq>6 z8&@I0^;j`hxGdxdJRz?*z#M|c@LoVeB#bySa~1~T)r9v#=5L7;G0Q}xws