update log
- 2022-04-12: add warning about dangers of omitting stroke_fill parameter.
Sometimes, we may want to add outline color to text strokes with Pillow.
Prior to version 6.2.0, we can not do this in Pillow.
Fortunately, starting from version 6.2.0, pillow supports text outlines natively in its ImageDraw.text()
method.
The code#
Here is a sample snippet to draw outline text:
from PIL import Image, ImageFont, ImageDraw
def main():
im = Image.new('RGB', (500, 500), (255, 255, 255))
text = "测试文字"
font = ImageFont.truetype(font="C:/WINDOWS/Fonts/STKAITI.TTF", size=70)
drawer = ImageDraw.Draw(im)
fill_color = (255, 0, 0)
stroke_color = (0, 0, 255)
drawer.text((50, 10), text, font=font, fill=fill_color, stroke_width=1, stroke_fill=stroke_color)
drawer.text((50, 80), text, font=font, fill=fill_color, stroke_width=3, stroke_fill=stroke_color)
drawer.text((50, 150), text, font=font, fill=fill_color, stroke_width=5, stroke_fill=stroke_color)
drawer.text((50, 220), text, font=font, fill=fill_color, stroke_width=7, stroke_fill=stroke_color)
im.show("text-image")
if __name__ == "__main__":
main()
The parameter stroke_width
controls the width of outline, and stroke_fill
controls the outline color.
The above script will create an image like the title image.
Note that you must specify both stroke_width
and stroke_fill
when creating outline text.
If stroke_fill
is omitted, it will default to text fill color, which will create terrible and illegible text on the image.