1

当我使用 PIL 在图像上呈现文本时,当 ® 在文本中时,它会添加一个额外的字符。

示例输入:品牌名称®

示例输出:Brand NameA®

它似乎总是字母 A。

这是我的代码:

font = ImageFont.truetype(os.path.join(settings.SITE_ROOT, "fixtures/fonts/%s.otf" % font), int(font_size * 10), encoding="unic")
image = Image.new("RGBA", (width * 10, height * 10), convert_hex_color(background))
draw = ImageDraw.Draw(image)
draw.text((0, 0), text, convert_hex_color(foreground), font=font)

在这一点上,我不知道为什么额外的字符在那里。我正在使用 PIL 1.1.7

“文本”被传递给方法。当打印到控制台时,它看起来像这样:

About the REALTOR® Content Resource
4

1 回答 1

3

尝试text先转换为 unicode 对象。

什么时候text是 unicode:

import Image
import ImageFont
import ImageDraw

font = ImageFont.truetype('/usr/share/fonts/truetype/msttcorefonts/Arial.ttf', 20)
image = Image.new("RGBA", (300,20), color = (0, 0, 0, 255))
draw = ImageDraw.Draw(image)
text = u'About the REALTOR® Content Resource'
draw.text((0, 0), text, (255, 0, 0, 255), font=font)
image.save('/tmp/out.png')

产量

在此处输入图像描述

但当

text = 'About the REALTOR® Content Resource'

代码产生

在此处输入图像描述


If textis a str, 将其转换为unicodedo

text = text.decode(encoding)

whereencoding必须替换为字符串的实际编码。要使用的正确编码取决于text定义或生成的方式。

于 2012-09-30T15:51:05.807 回答