我要在Ubuntu 14.04 LTS
机器上托管的 Django 应用程序中的图像上绘制文本。Pillow 4.2.1
是我选择的库。
我已经通过ImageDraw
导入成功完成了这项任务PIL
(实际代码在这个问题的末尾)
我的代码非常适用于英语、法语或西班牙语等语言。
但不适用于阿拉伯语、波斯语或乌尔都语等自然草书语言。在这种情况下,它会分别绘制每个字母。例如فارسی
(波斯语)被绘制为:
请注意,我为此安装sudo apt-get install ttf-mscorefonts-installer
并尝试过/fonts/truetype/msttcorefonts/Arial.ttf
。
有人建议我确保我使用的字体有ligatures。我的理解是Arial
确实支持连字,但问题仍然存在。
我的问题是:我应该怎么做才能解决这个问题?我的代码必须支持自然草书语言,如阿拉伯语、波斯语或乌尔都语。
编码:
from PIL import ImageDraw
draw = ImageDraw.Draw(img)
base_width, base_height = img.size
y = 2
for line in lines:
width, height = font.getsize(line)
x = (base_width - width) / 2
text_with_stroke(draw,x,y,line,font,fillcolor,shadowcolor)
y += height
哪里text_with_stroke
很简单:
def text_with_stroke(draw,width,height,line,font,fillcolor,shadowcolor):
draw.text((width-1, height), line, font=font, fill=shadowcolor)
draw.text((width+1, height), line, font=font, fill=shadowcolor)
draw.text((width, height-1), line, font=font, fill=shadowcolor)
draw.text((width, height+1), line, font=font, fill=shadowcolor)
draw.text((width, height), line, font=font, fill=fillcolor)
简而言之,这段代码将任何给定的文本分成单独的行,同时考虑到字体大小和底层图像大小。然后它迭代地在图像上绘制每一行文本。