- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有几行文本,我希望每行的宽度(缩放字体大小)适合上下文的宽度。有没有办法做到这一点?我为此使用了 pangocairo 和 python。
最佳答案
我希望有时间找到可行的解决方案,但您可以从以下内容开始:
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
一无所知,直到我阅读了您的问题并查阅了文档。关于python - 使用 Pango 和 Cairo (Pycairo) 使线条适合宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14750093/
我正在努力在矩形 png 背景上画一个圆圈。每当我尝试画一个圆时,它都会根据我的图像比例进行拉伸(stretch)——使其成为椭圆而不是圆。 设置如下: #set background image s
我需要画一条有向线或箭头。 context.move_to (10,10)context.line_to(10,100) 这提供了一条无向线,但我需要一个箭头。我如何在 pycairo 中完成此操作?
基于问题Create PDF with (resized) PNG images using Pycairo - rescaling Surface issue我试图创建重新缩放图像并将图像放置在特定
我正在使用 Pango + Cairo(通过 GObject)用 python3.7 渲染文本,并且想通过创建一个属性并将该属性附加到我的 pango 布局来设置字母间距。 在 pango 的 gno
我正在使用 curve_to 与 pycairo 进行绘图,代码如下: ctx.move_to(0.4,0.8) ctx.curve_to(0.3,0.4 ,0.4,0.4 ,0.4,0.4) ctx
我知道可以将 PyCairo 表面放置在 Gtk 绘图区域内。但我认为 Qt 更好用,所以我一直想知道是否有办法将 PyCairo 表面放置在某些 Qt 组件中? 最佳答案 众所周知,Qt 自己的基于
我正在学习使用Pycairo到目前为止我做得很好,我可以绘制直线/贝塞尔曲线,很快,数学曲线,我试图将点表示为一条非常小的线,但它不起作用 我也尝试过 context.move_to(5,5) con
我不想用pyCairo填充多边形,但我希望某些区域不填充。例如,我想制作这样的东西: 灰色背景是 SVG 查看器的背景,因此代表图像的透明部分。 我尝试使用此代码: import cairo cair
我无法理解如何使用 pyCairo 简单地旋转图像... 这是我根据 this example 所做的: image_surface = cairo.ImageSurface.create_from_
社区。 我知道这里有很多答案、手册、教程和 Internet 上的引用资料,还有关于这个问题的更多信息。我也知道需要线性代数知识。但是,当我想到有时间弄清楚所有理论并在实践中解决练习时 - 我的头都炸
我希望能够使用 Cairo 在 Python 中直接绘制到根窗口。我已经在全屏窗口上测试了我的代码绘图,所以我知道这不是问题所在。但是,当我尝试像这样直接绘制到根窗口时: root = gtk.gdk
所以我有venv,我想使用还没有安装的pycairo模块 (venv) command$ python -m pip install pycairo Collecting pycairo Usin
这是我的代码: import cairoimport osfrom PIL import Imageimagesize = (512,128)surface = cairo.ImageSurface(
这是我的代码: import cairoimport osfrom PIL import Imageimagesize = (512,128)surface = cairo.ImageSurface(
我正在尝试安装 sdaps,但是当我运行 setup.py install 命令时,出现以下错误: kashif@crunchbang:~/sdaps-1.0.5$ python setup.py i
我正在创建一个使用 Cairo 在图像上显示文本等的应用程序。 有没有一种方法可以在不修改高度的情况下更改文本宽度?我已经可以根据宽度缩放字体大小。 一种管理方式tracking & kearning
当我在 osx 上使用 easy_install 安装 pycairo 时,出现以下错误消息: Searching for pycairo Reading http://pypi.python.org
我看到这里有一个关于类似问题的老问题: How do you install PyCairo (Cairo for Python) on Windows? 因为它是 2012 年的,我想它已经过时了。
我需要 pyCairo 做的是: 生成一个大小为 100x100 的图像,其中包含一些文本和来自文件系统的图像作为背景 文本应位于文本环绕大小为 20x20 且左下角位于 (40,40) 的框中。 保
我正在尝试安装 pycairo (cairo graphics library 的 Python 绑定(bind))在 OSX 下。 我开始了 easy_install pycairo 得到: Req
我是一名优秀的程序员,十分优秀!