我要在Ubuntu 14.04 LTS
機器上託管的Django應用程序中的圖像上繪製文本。 Pillow 4.2.1
是我的選擇。使用枕頭繪製草書文本
我已經成功地實現通過ImageDraw
這個任務從PIL
進口(實際的代碼是在這個問題結束)
我的代碼完全適用於語言,如英語,法語或西班牙語。
但不適用自然草書語言如阿拉伯語,波斯語或烏爾都語。在這種情況下,它會分別繪製每個字母。例如。 فارسی
(波斯)繪製成:我安裝sudo apt-get install ttf-mscorefonts-installer
,並試圖/fonts/truetype/msttcorefonts/Arial.ttf
這個
注意。
有人advised me確保我使用的字體有連字。我的理解是,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)
概括地說,此代碼打破任何給定的文本被分成幾行,同時考慮到的字體大小和基礎圖像大小。然後迭代地在圖像上繪製每行文字。