如何在u字符串中使用变量?阿拉伯语方言文本图片写入问题
解决方法
首先明确:Python 3 里所有字符串默认都是 Unicode 类型,不需要手动加u''前缀——你之前用的f"{u'{text}'}"是错误写法,反而会导致问题。
直接修正两处错误即可:
- 移除
text()方法里多余的f"{u'{text}'}"写法,直接传入text变量 - 删除
text()方法里的font_size=100参数(这个参数是在ImageFont.truetype()里设置的,text()方法不支持该参数,会触发报错)
修正后的完整代码:
from PIL import Image, ImageDraw, ImageFont import arabic_reshaper from bidi.algorithm import get_display # 加载支持阿拉伯语方言的字体 font = ImageFont.truetype('AA Sameer Qamri Regular.ttf', size=100) # 处理阿拉伯语文本:先重塑再调整双向显示 text = get_display(arabic_reshaper.reshape("السَّلامٌ عليكمُ")) print(text) # 打开背景图 image = Image.open("insta background.png") # 绘制文本 draw = ImageDraw.Draw(image) # 直接传入处理好的text变量即可,它本身就是Unicode字符串,包含方言字符 draw.text( (200, image.height - image.height/2 - 50), text, font=font, fill=(0, 0, 0) ) image.show()
关键说明
- 经过
arabic_reshaper.reshape()和get_display()处理后的text变量,已经是包含正确字形和双向顺序的Unicode字符串,直接用就行,不用额外转义或加前缀。 - 确保你的字体文件
AA Sameer Qamri Regular.ttf在代码运行的目录下,或者提供完整路径,否则PIL会找不到字体导致字符显示异常。
内容的提问来源于stack exchange,提问作者Abdulmoty
相关产品推荐
相关产品推荐

