我正在创建一个使用Cairo在图像上显示文本的应用程序。
有没有办法可以在不修改高度的情况下更改文字宽度?我已经可以根据宽度缩放字体大小。
管理tracking & kearning的方法非常理想。它看起来不像是内置的,但我想知道我将使用哪些部分来构建该功能(或任何仅修改宽度的功能)。
答案 0 :(得分:2)
Pango似乎提供了很多自定义功能。
Markup format允许您指定letter_spacing
。
我还没有对框架有深入的了解,但值得研究。
您还可以创建一个函数将文本拆分为字符,显示每个字符,在显示每个字符后稍微移回上下文。如下所示:
# This is just an example. It could definitely use improvement.
def foo(cr, text, tracking):
# Normal tracking = 0. Negative spacing shrinks, positive expands.
i = 0
for c in text:
x, y = cr.get_current_point()
cr.show_text(c)
counter += 1
cr.move_to( x - i*tracking, y)
您也可以在自己的Context子类中定义此方法:
class myContext(Context):
def foo(self, text, spacing):
# replace every cr above with self
一旦你设定了一个方法,你就可以做一个foo(cr," bob",-3)来做一个更苗条的鲍勃。
您还可以在代码中使用cr.text_extents(text)
来确定文字大小&比例间距。据我所知,从开罗的Context中获取字体大小并不容易。