我正在尝试使用PIL渲染一些文本,但坦白说,结果是废话 .
例如,这是我在Photoshop中写的一些文字:
以及PIL的结果:
如您所见,PIL的结果不尽如人意 . 也许我只是挑剔,但有没有办法使用PIL绘制文本,使结果更接近我的参考图像?
这是我在Python 2.7和PIL 1.1.7上使用的代码
image = Image.new("RGBA", (288,432), (255,255,255))
usr_font = ImageFont.truetype("resources/HelveticaNeueLight.ttf", 25)
d_usr = ImageDraw.Draw(image)
d_usr = d_usr.text((105,280), "Travis L.",(0,0,0), font=usr_font)
5 回答
我想出了我认为可以接受的解决方案 .
我所做的是渲染文本大,比如它需要的大小3倍然后缩放它用抗锯齿调整它的大小,它不是100%完美,但它比默认更好,并且不需要cairo或者攀高 .
例如,
你最终得到这个结果,
这比我之前使用相同的字体要好得多 .
尝试使用pycairo - Cairo绘图库的python绑定 - 它可用于更精细的绘图,使用抗锯齿线等 - 并且您还可以生成基于矢量的图像
正确处理字体和布局很复杂,并且还需要使用“pango”和“pangocairo”库 . 虽然它们是用于严肃的字体工作(所有GTK小部件都使用pango进行字体渲染),但是可用的docuemtnation和示例非常差 .
下面的示例显示系统中可用的打印件,并将示例文本呈现为在命令行上作为参数传递的字体系列 .
我从未使用PIL,但快速浏览Draw方法的文档表明PIL提供了渲染 simple 图形的方法 . Photoshop提供了一种渲染 complex 图形的方法 . 要获得接近类似Photoshop的结果,至少需要字体提示和消除锯齿 . PIL 's documentation doesn'甚至暗示有这样的能力 . 您可能希望使用可能更好地在图像上呈现文本的外部工具 . 例如,ImageMagick(您将需要使用8位版本,它处理标准的24位RGB) . 你可以在这里找到一些文字绘图样本:http://www.imagemagick.org/Usage/draw/
您也可以尝试将字体写入两次,以提高质量 .
建议:使用Wand或其他成像库
这是魔杖的一个例子 -