有没有办法在PyCairo中改变字母间距? (或更改文字宽度而不影响高度)

时间:2014-08-05 22:38:57

标签: python cairo pycairo

我正在创建一个使用Cairo在图像上显示文本的应用程序。

有没有办法可以在不修改高度的情况下更改文字宽度?我已经可以根据宽度缩放字体大小。

管理tracking & kearning的方法非常理想。它看起来不像是内置的,但我想知道我将使用哪些部分来构建该功能(或任何仅修改宽度的功能)。

1 个答案:

答案 0 :(得分:2)

Pango / PangoCairo

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中获取字体大小并不容易。