【问题标题】:Is there a way to change letter spacing in PyCairo? (Or change a text width without affecting the height)有没有办法改变 PyCairo 中的字母间距? (或更改文本宽度而不影响高度)
【发布时间】:2014-08-05 22:38:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: python cairo pycairo


    【解决方案1】:

    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) 来计算文本大小和比例间距。据我所知,从 Cairo 的 Context 获取字体大小并不容易。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多