You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pango/Cairo中调整文本字间距?

在Cairo中使用Pango调整文本字符间距

要给Cairo中的文本增加字符间距,需借助Pango的属性系统实现。核心是通过pango_attr_letter_spacing_new创建字间距属性,并将其应用到整个文本范围。

以下是修改后的完整可运行代码:

#include <cairo.h>
#include <pango/pangocairo.h>

int main(int argc, char **argv) {
    cairo_surface_t *s = cairo_image_surface_create(CAIRO_FORMAT_RGBA128F, 512, 128);
    cairo_t *ctx = cairo_create(s);
    cairo_set_source_rgb(ctx, 1, 1, 1);
    cairo_paint(ctx);

    cairo_set_source_rgb(ctx, 0.0, 0.0, 0.0);
    PangoLayout *layout = pango_cairo_create_layout(ctx);
    pango_layout_set_text(layout, "Hello world", -1);

    // 创建并设置字间距属性
    PangoAttrList *attr_list = pango_attr_list_new();
    // 额外字间距:500*PANGO_SCALE 对应约0.488em的间距(PANGO_SCALE固定为1024)
    // 正数增加间距,负数缩小间距,可根据需求调整数值
    PangoAttribute *letter_spacing_attr = pango_attr_letter_spacing_new(500 * PANGO_SCALE);
    letter_spacing_attr->start_index = 0;
    letter_spacing_attr->end_index = -1; // 应用到全部文本
    pango_attr_list_insert(attr_list, letter_spacing_attr);
    pango_layout_set_attributes(layout, attr_list);
    pango_attr_list_unref(attr_list);

    PangoFontDescription *desc = pango_font_description_from_string("Times New Roman");
    pango_font_description_set_size(desc, 32*PANGO_SCALE);
    pango_layout_set_font_description(layout, desc);
    pango_font_description_free(desc);

    cairo_move_to(ctx, 32.0, 32.0);
    pango_cairo_show_layout(ctx, layout);
    g_object_unref(layout);

    cairo_surface_write_to_png(s, "helloworld.png");
    cairo_destroy(ctx);
    cairo_surface_destroy(s);
}

关键说明

  • 属性列表:PangoAttrList用于管理文本属性,这里仅需添加字间距属性。
  • 间距单位:pango_attr_letter_spacing_new的参数单位是1/PANGO_SCALE em,PANGO_SCALE固定为1024,因此500*PANGO_SCALE等价于约0.488em的额外间距。
  • 应用范围:start_index=0和end_index=-1表示将属性作用于整个文本,若需局部调整,可修改这两个索引值。
  • 资源释放:使用完属性列表后需调用pango_attr_list_unref释放内存,避免泄漏。

编译命令保持不变:

gcc -o helloworld `pkg-config --cflags --libs cairo pangocairo pango` helloworld.c

内容的提问来源于stack exchange,提问作者cryptarch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 21:02:38