从字体创建文本预览的方法

时间:2009-12-17 07:56:30

标签: python image fonts imagemagick python-imaging-library

我目前正在使用ImageMagick的convert命令从.ttf字体文件创建文本预览(.png)。总的来说,尽管有时无法读取某些有效的.ttf文件,但它在自动文本定位方面更好。速度不是很快,但可以接受。

PIL的ImageFont看起来不擅长文本对齐,经常在画布外打印第一个字符的左下角。

除了上述两个,有没有人知道更好的选择?我想知道在流量如此繁重的myfonts.com等网站上为文本预览部分供电需要什么样的技术。

修改

PIL字体示例无法正确绘制字体。示例中使用的字体是Hanford script

import Image, ImageDraw, ImageFont
font = ImageFont.truetype('HANFORD_.TTF', 122)
text_width, text_height = font.getsize('Hanford script')
print text_width, text_height
>>> 833 47
img = Image.new('RGBA', (text_width, text_height))
draw = ImageDraw.Draw(img)
draw.text((0, 0), 'Hanford script', font=font, fill=(0, 0, 0))
img.save('output.png')

输出图像仅包含“Hanford脚本”的上半部分。

我尝试使用imagemagick的转换命令:

convert -font "HANFORD_.TTF" -background transparent -gravity center -size 830x80 label:'Hanford script' output.png

输出图像与PIL得到的相同。

这不是PIL或imagemagick无法获得正确文本大小的唯一字体。对于其他一些字体,如Ginga,它们只是放大文本高度,导致输出图像的上半部分为空白。谁知道原因?

3 个答案:

答案 0 :(得分:1)

我想这些网站是由一些使用Pango之类的自定义代码驱动的,或者只是在后端使用简单的Freetype来渲染图像文件。

图像可能永远都不会打到光盘,但我确信在适当的地方缓存了一些内容。

答案 1 :(得分:0)

这有点像,但你看过sIFR (Scalable Inman Flash Replacement)吗?它用于允许Web设计人员使用他们选择使用的任何字体呈现的文本插入短文本块(标题等),即使用户没有在本地安装它。

如果您要使用sIFR创建一个简单的网页,并在本地为自己提供,那么它可能适合您的目的。

就像我说的那样,这是一个棘手的解决方案,但是......: - )

答案 2 :(得分:0)

我也有同样的问题。几天前,我发现了这个库。我尝试过,它似乎真的很有用。我共享链接,因为我也遇到同样的问题。

https://github.com/MatteoGuadrini/fontpreview

字体预览示例:

from fontpreview import FontPreview

fp = FontPreview('/tmp/noto.ttf')
fp.save('/tmp/fp.png')