标签: cairo

在Gtk +中绘制图像的最快方法是什么?

我有一个图像/ pixbuf,我想绘制到gtk.DrawingArea并经常刷新,所以blitting操作必须快.这样做很简单:

def __init__(self):
  self.drawing_area = gtk.DrawingArea()
  self.image = gtk.gdk.pixbuf_new_from_file("image.png")

def area_expose_cb(self, area, event):
  self.drawing_area.window.draw_pixbuf(self.gc, self.image, 0, 0, x, y)
Run Code Online (Sandbox Code Playgroud)

然而,导致性能非常慢,可能是由于pixbuf不是显示器颜色格式.

我也没有在开罗取得成功,因为它似乎仅限于24/32位格式,并且没有16位格式(FORMAT_RGB16_565不受支持和弃用).

在Gtk +中快速绘制图片有哪些替代方案?

python gtk pygtk cairo

8
推荐指数
1
解决办法
3446
查看次数

安装py2cairo的步骤?

似乎pycairo在5月份分为2.x版本的py2cairo.py2cairo没有pip或easy_install安装选项.我抓住了最新的py2cairo tar,以及注册为依赖项的cairo 1.8.10软件包.当我尝试首先配置cairo时,它最终会出错,它需要pkg-config.但是,我也找不到pip或easy_install中的pkg-config安装选项.我完全失去了如何安装py2cairo.我在Mac Snow Leopard上这样做.

python pip easy-install cairo pycairo

8
推荐指数
1
解决办法
2045
查看次数

Python:OSError:无法加载库libcairo.so.2

我在Windows 7平台上运行python脚本时遇到了一些麻烦.我已经安装了Python和cairo,最后一个使用"pip".我正在使用此命令运行脚本:

C:\Python34>python.exe label/make_label.py
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

Traceback (most recent call last):
  File "label/make_label.py", line 6, in <module>
    import cairocffi as cairo
  File "C:\Python34\lib\site-packages\cairocffi\__init__.py", line 41, in <modul
e>
    cairo = dlopen(ffi, *CAIRO_NAMES)
  File "C:\Python34\lib\site-packages\cairocffi\__init__.py", line 34, in dlopen

    return ffi.dlopen(names[0])  # pragma: no cover
  File "C:\Python34\lib\site-packages\cffi\api.py", line 118, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "C:\Python34\lib\site-packages\cffi\api.py", line 411, in _make_ffi_libra
ry
    backendlib = _load_backend_lib(backend, libname, flags)
  File "C:\Python34\lib\site-packages\cffi\api.py", line 400, in _load_backend_l
ib
    return backend.load_library(name, flags)
OSError: cannot load …
Run Code Online (Sandbox Code Playgroud)

python cairo

8
推荐指数
4
解决办法
9685
查看次数

Weasyprint 在调用 write_pdf 时获得未定义的属性:“AttributeError:‘PosixPath’对象没有属性‘read_text’”

我正在 ubuntu 18.04 上运行 weasyprint 项目,并尝试创建 aa pdf。

当我尝试设置页脚图像时,问题就开始了。我正在 python 3.6.7 上运行

这是我调用 weasyprint 的代码:

import sys
import os
from weasyprint import HTML, CSS

htmlFile = sys.argv[1]
pdfFile = sys.argv[2]

html = HTML(filename=htmlFile)

css = CSS(string='@page { @bottom-center { width: 125%; margin-top: 10px; content: " "; background-image: url(file://' + os.getcwd() + '/pdf/footer.png); background-repeat: no-repeat; background-position: right;  background-size: 100%; } }')

html.write_pdf(pdfFile, stylesheets=[css])
Run Code Online (Sandbox Code Playgroud)

但后来我收到以下错误:

Error: Command failed: python3 /node_modules/my-project/python/run.py /node_modules/my-project/pdf/catalog_01e299a3-1fca-482b-a512-e1bea832559f.html /node_modules/my-project/pdf/catalog_01e299a3-1fca-482b-a512-e1bea832559f.pdf
Traceback (most recent call last):
File "/node_modules/my-project/python/run.py", line 3, in …
Run Code Online (Sandbox Code Playgroud)

python cairo weasyprint ubuntu-18.04

8
推荐指数
1
解决办法
1万
查看次数

在使用适用于 macOS 的 GitHub Actions 进行测试之前如何安装 X11?

我正在使用 GitHub Actions 测试 R 包,它在 Windows 和 Linux 上成功。

但是,它在 Mac OS 上失败,正如您在日志中看到的那样:

  Warning in grSoftVersion() :
    unable to load shared object '/Library/Frameworks/R.framework/Resources/modules//R_X11.so':
    dlopen(/Library/Frameworks/R.framework/Resources/modules//R_X11.so, 6): Library not loaded: /opt/X11/lib/libSM.6.dylib
    Referenced from: /Library/Frameworks/R.framework/Versions/4.0/Resources/modules/R_X11.so
    Reason: image not found
  Warning in cairoVersion() :
    unable to load shared object '/Library/Frameworks/R.framework/Resources/library/grDevices/libs//cairo.so':
    dlopen(/Library/Frameworks/R.framework/Resources/library/grDevices/libs//cairo.so, 6): Library not loaded: /opt/X11/lib/libXrender.1.dylib
    Referenced from: /Library/Frameworks/R.framework/Versions/4.0/Resources/library/grDevices/libs/cairo.so
    Reason: image not found
  Warning in png(filename = file, width = width, height = height, units = "in",  :
    failed to load …
Run Code Online (Sandbox Code Playgroud)

x11 macos r cairo github-actions

8
推荐指数
1
解决办法
884
查看次数

图像合成

我有一些音乐乐队的专辑标题.我想用一些将围绕图像角落的面具绘制它.所以,我在gimp中准备了这样的面具:

在此输入图像描述

我正在使用白色面具,但在白色背景下它是隐形的.所以,这是渲染的代码:

# Draw album image
img = cairo.ImageSurface.create_from_png('images/album.png')
ctx.set_source_surface(img, posX, posY)
ctx.paint()

# Draw mask
ctx.set_operator(cairo.OPERATOR_DEST_IN)
img = cairo.ImageSurface.create_from_png('images/mask.png')
ctx.set_source_surface(img, posX, posY)
ctx.paint()
Run Code Online (Sandbox Code Playgroud)

如你所见,我已经习惯了OPERATOR_DEST_IN.我在此页面上找到的快速示例.

但是,当我在cairo中设置合成运算符时,我的程序中的一切都消失了:(.当我评论该行时,一切都没问题,但是掩码超出了我的图像.正确的方法是什么?

ps我正在使用python2,cairo库


当我删除合成操作符时,我看到(不要忘记真正的蒙版是白色的,在这种情况下专辑图像是暗的):

在此输入图像描述

python image composite cairo

7
推荐指数
1
解决办法
2647
查看次数

在pycairo中心旋转文本

社区.

我知道这里有很多答案,手册,教程和互联网上的参考资料,并且更多关于这个问题.我也知道线性代数的知识是必需的.但是,当我想到时间去理解所有的理论并在实践中解决练习时 - 我的头脑正在吹走,我不能做最简单的事情:(

如果你知道一个快速的解决方案,如何在渲染之前将文本旋转到其中心,请告诉我,pleeease.

现在我有:

#...
cr.move_to(*text_center)
myX, myY = text_center[0] - (width / 2), text_center[1] + (height / 2)

cr.save()
cr.translate(myX, myY)
cr.rotate(radians(text_angle))
cr.show_text(letter)
cr.restore()
#...
Run Code Online (Sandbox Code Playgroud)

但是我的信并没有绕着自己转动.这就像倒在右边:(我知道我的代码不对.也许我想念转型,但我不知道怎么做对.

更新:不幸的是,文本不受翻译的影响,所以

cr.translate(10000, 10000)
cr.rotate(radians(15))
cr.show_text("hello")
Run Code Online (Sandbox Code Playgroud)

将完全相同

cr.rotate(radians(15))
cr.show_text("hello")
Run Code Online (Sandbox Code Playgroud)

而且我不知道如何在没有新表面或其他东西(如图形处理器中的新图层)的情况下在其中心上进行文本旋转:(

python graphics rotation cairo pycairo

7
推荐指数
2
解决办法
3171
查看次数

如何在Mono中访问Linux Framebuffer(Mono.Cairo/GTK#)?

我开始在Mono框架下为Linux编写一个小应用程序,该应用程序本质上是一个小型的kiosk前端,用户交互非常少.这是为了替换基于100%文本/控制台的同一应用程序的先前版本.

由于这将在Raspberry Pi上运行,我想避免运行X并让我的应用程序直接与Framebuffer通信.我开始使用Mono框架和C#作为我的开发语言,因为我非常了解C#.在这种情况下,可移植性不是问题.

我在查找适当的库和绑定时遇到了一些麻烦,让我从Mono访问Framebuffer.这些GTK#库都明确绑定到X11接口,无论如何,在Debian Wheezy中似乎没有为ARM Soft-Float(armel)架构预构建的GtkFB库.

Mono.Cairo库公开了一个DirectFBSurface类型,但是该表面的构造函数有两个IntPtr参数而没有记录,因此我不知道应该将什么传递给构造函数以正确初始化Framebuffer作为Cairo Surface.

有没有人使用Mono和C#与Linux Framebuffer交谈,如果是这样,你能提供基本的例子来初始化并开始绘制到FB,或者指向在线文档来提供帮助吗?

更新1

我想我会尝试null使用以下代码为两个构造函数参数实例化DirectFBSurface :

public static void Main(string[] args)
{
    // ...
    DirectFBSurface surface = new DirectFBSurface(((IntPtr)null), ((IntPtr)null));
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我希望这会生成一个异常,表明null不允许参数值,但是看起来好像DirectFBSurface没有实现Mono.Cairo或没有编译到Debian Wheezy(armel)附带的库中:

Unhandled Exception: System.EntryPointNotFoundException: cairo_directfb_surface_create
  at (wrapper managed-to-native) Cairo.NativeMethods:cairo_directfb_surface_create (intptr,intptr)
  at Cairo.DirectFBSurface..ctor (IntPtr dfb, IntPtr dfb_surface) [0x00000] in <filename unknown>:0
  at Info.Insch.SandBox.TestCairo.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
Run Code Online (Sandbox Code Playgroud)

所以看起来这种Mono.Cairo方法可能无法满足我的需求,如上所述,GTK#Framebuffer库似乎不是Armel的Debian Wheezy的一部分.是否有另一组库可用于从Mono访问Linux Framebuffer?

c# mono framebuffer gtk# cairo

7
推荐指数
1
解决办法
2092
查看次数

无法在开罗中呈现文本

我是cairo的新手,并且已阅读其网站上的教程/文档。现在,我可以制作线条,矩形,基本上可以渲染图像,但不能渲染文本。

我正在使用以下代码

cairo_select_font_face (cr, "monospace", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAl);

    cairo_set_font_size (cr, 14);

    cairo_set_source_rgb (cr, 1, 1, 1);

    cairo_move_to (cr, 50, 50);

    cairo_show_text (cr, "Print Something");
Run Code Online (Sandbox Code Playgroud)

有人可以指出我的错误吗?

cairo

7
推荐指数
1
解决办法
2057
查看次数

Win 7/Python 2.7 32 位:OSError:无法加载库 pangocairo-1.0:错误 0x7e

我想测试weasyprint但它在安装pangocairo.

我成功安装了 weasyprint:

pip install weasyprint
Run Code Online (Sandbox Code Playgroud)

我使用本教程安装了 gtk ,从这里下载。

我还设置了 gtk\bin 的路径。

$weasyprint
Traceback (most recent call last):
  File "c:\root\python27\lib\runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "c:\root\python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "c:\root\python27\scripts\weasyprint.exe\__main__.py", line 5, in <module>
  File "c:\root\python27\lib\site-packages\weasyprint\__init__.py", line 336, in <module>
    from .css import PARSER, preprocess_stylesheet  # noqa
  File "c:\root\python27\lib\site-packages\weasyprint\css\__init__.py", line 30, in <module>
    from . import computed_values
  File "c:\root\python27\lib\site-packages\weasyprint\css\computed_values.py", line 18, in …
Run Code Online (Sandbox Code Playgroud)

python windows dll cairo python-2.7

7
推荐指数
1
解决办法
560
查看次数