首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将线宽与Pango和开罗(Pycairo)相匹配

将线宽与Pango和开罗(Pycairo)相匹配
EN

Stack Overflow用户
提问于 2013-02-07 11:32:17
回答 1查看 1.4K关注 0票数 5

我有几行文本,我希望每一行都与上下文的宽度(缩放字体大小)相适应。有办法这样做吗?我要用pangocairo和python来做这个。

EN

回答 1

Stack Overflow用户

发布于 2015-03-03 01:50:23

我希望有时间解决这个问题,但你可以从以下几个方面开始:

代码语言:javascript
复制
import cairo
import pango
import pangocairo
import sys

W = 500
H = int(1.4 * W)

surf = cairo.ImageSurface(cairo.FORMAT_ARGB32, W, H)
context = cairo.Context(surf)

#draw a background rectangle:
context.rectangle(0, 0, W, H)
context.set_source_rgb(1, 1, 1)
context.fill()

#get font families:

font_map = pangocairo.cairo_font_map_get_default()
families = font_map.list_families()

# to see family names:
#print sorted([f.get_name() for f in   font_map.list_families()])

# context.set_antialias(cairo.ANTIALIAS_SUBPIXEL)

# Translates context so that desired text upperleft corner is at 0,0

text = """Fit line
to width with 
Pango 
and Cairo"""

fontname = "Arial"
context.set_source_rgb(0, 0, 0)

y = 0
for line in text.split("\n"):
    pangocairo_context = pangocairo.CairoContext(context)
    pangocairo_context.set_antialias(cairo.ANTIALIAS_SUBPIXEL)
    layout = pangocairo_context.create_layout()
    font = pango.FontDescription(fontname + " 25")
    layout.set_font_description(font)
    layout.set_text(line)
    pangocairo_context.update_layout(layout)
    w, h = layout.get_pixel_size()
    print w, h, y
    context.translate(0, y)
    pangocairo_context = pangocairo.CairoContext(context)
    pangocairo_context.set_antialias(cairo.ANTIALIAS_SUBPIXEL)
    layout = pangocairo_context.create_layout()
    font_descr = "{} {:0.1f}".format(fontname, float(W) / w * 25)
    font = pango.FontDescription(font_descr)
    layout.set_font_description(font)
    layout.set_text(line)
    _, y = layout.get_pixel_size()
    pangocairo_context.update_layout(layout)
    pangocairo_context.show_layout(layout)

with open("cairo_text.png", "wb") as image_file:
    surf.write_to_png(image_file)

结果:

我将把改进这个算法作为读者的练习,您可以尝试:

  • 缩放字体并调整后,验证布局的宽度。
  • 以大字体大小和缩放pangocairo_context代替呈现
  • 我不知道,事实上,我对pycairo一无所知,直到我读了你的问题,然后用眼镜去找医生。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14750093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档