标签: cairo

如何使用librsvg Python绑定调整svg映像文件的大小

当光栅化svg文件时,我希望能够为生成的png文件设置宽度和高度.使用以下代码,仅将画布设置为所需的宽度和高度,具有原始svg文件尺寸的实际图像内容将呈现在(500,600)画布的左上角.

import cairo
import rsvg

WIDTH, HEIGHT  = 500, 600
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT)

ctx = cairo.Context(surface)

svg = rsvg.Handle(file="test.svg")
svg.render_cairo(ctx)

surface.write_to_png("test.png")
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能使图像内容与cairo canvas相同?我试过了

svg.set_property('width', 500)
svg.set_property('height', 500)
Run Code Online (Sandbox Code Playgroud)

但得到了

TypeError: property 'width' is not writable
Run Code Online (Sandbox Code Playgroud)

librsvg python绑定的文档似乎非常罕见,只有一些随机代码片段在cairo网站上.

python cairo librsvg

5
推荐指数
2
解决办法
4625
查看次数

如何在Ubuntu 10.04上安装python 3的pycairo

我正在尝试安装pycairo 1.10.0以用于我的自定义构建python 3.1.然而,

sudo /flower/bin/easy_install-3.1 pycairo
Run Code Online (Sandbox Code Playgroud)

失败了

XXX@XXXX:/adventures$ sudo /flower/bin/easy_install-3.1 pycairo
install_dir /flower/lib/python3.1/site-packages/
Searching for pycairo
Reading http://pypi.python.org/simple/pycairo/
Reading http://cairographics.org/pycairo
Best match: pycairo 1.10.0
Downloading http://cairographics.org/releases/pycairo-1.10.0.tar.bz2
Processing pycairo-1.10.0.tar.bz2
error: Couldn't find a setup script in /tmp/easy_install-zeG9HB/pycairo-1.10.0.tar.bz2
Run Code Online (Sandbox Code Playgroud)

事实上,setup.py在上述下载中没有; 相反,INSTALL说:

Install Procedure
-----------------
$ ./waf --help     # shows available waf options
$ ./waf configure  # use --prefix and --libdir if necessary
                   # --prefix=/usr --libdir=/usr/lib64  for Fedora 64-bit
$ ./waf build
$ ./waf install

Use
$ python3 ./waf ... …
Run Code Online (Sandbox Code Playgroud)

python cairo pycairo ubuntu-10.04 python-3.x

5
推荐指数
2
解决办法
5837
查看次数

将文件中的字体加载到pango?

我有一个代码使用CairoPango来创建一个图像:

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

#define IMAGE_WIDTH  650
#define IMAGE_HEIGHT 150

#define TEXT "HELLO WORLD"
#define FONT "MizuFontAlphabet Normal 40"

/*
 * $ gcc $(pkg-config pangocairo cairo --cflags --libs) file.c
 */


int main(int argc , char** argv) {

    cairo_surface_t *surface;
    cairo_t *cr;

    PangoLayout *layout;
    PangoFontDescription *desc;
    PangoRectangle extents;

    surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, IMAGE_WIDTH, IMAGE_HEIGHT);
    cr      = cairo_create(surface);

    cairo_rectangle(cr, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
    cairo_set_source_rgb(cr, 0, 0, 0);
    cairo_fill(cr);
    cairo_stroke(cr);

    /* the font is needed to be installed in fonts …
Run Code Online (Sandbox Code Playgroud)

c fonts pango cairo

5
推荐指数
2
解决办法
4672
查看次数

我可以在OSX中使用EGL吗?

我试图在C++应用程序中使用Cairo库,利用它在Mac中的GL加速.(我使用Quartz后端进行了相同的测试,但性能令人失望.)它说它支持EGL和GLX.使用GLX需要(外部安装)XQuartz并打开一个XWindow,所以我倾向于EGL:

Apple的编程指南页面告诉我们使用NSOpenGL*,这个页面和其他人说它使用CGL.

这个(2012)页面说Mac有EAGL,它只与EGL类似(我想它指的是IOS,而不是MAC,因为它的EAGL参考链接到IOS帮助页面).

Angle说它支持EGL但它适用于Windows中的Direct3D,据我所知(?)

据说GLFW v3支持(在未来的版本中?)但是通过GLX,它被称为(?).

Mali表示它有一个适用于Mac的模拟器,但我不知道它是加速还是仅用于其硬件(它还说它只支持不同平台上的EGL子集).

当使用EGL时,大多数链接指的是移动设备.我使用的是Mac OS 10.8和XCode 4.6.目前的情况是什么/我如何(如果可以的话)在Mac(现在)中使用EGL?

c++ opengl macos cairo egl

5
推荐指数
1
解决办法
4020
查看次数

如何使用 cairo 创建圆形阴影效果?

我试图通过给绘图一个微妙的阴影效果来增强我的应用程序的图形外观。我正在使用 python 和 cairo 绘图。

使用下面的示例代码,我可以用如图所示的图片绘制一个外圆和一个内圆。

图片

我想要做的是用阴影效果替换那个外圆。

我想我需要使用线性梯度或径向梯度,但我找不到一个很好的例子来实现我想要实现的目标。

有人请指出我正确的方向吗?

from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GdkPixbuf

import cairo
import math

class MyWindow (Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title='MyWindow')

        darea = Gtk.DrawingArea()
        darea.connect('draw', self.on_draw)
        self.add(darea)

        self.width, self.height = self.get_size()

        filename = "/usr/share/backgrounds/Thingvellir_by_pattersa.jpg"

        if self.width > self.height:
            self.width = self.height
        else:
            self.height = self.width

        self.width = self.width
        self.height = self.height

        self.pixbuf = GdkPixbuf.Pixbuf.new_from_file(filename)
        self.pixbuf = self.pixbuf.scale_simple(self.width, self.width, GdkPixbuf.InterpType.BILINEAR)

    def on_draw(self, widget, cr):

        w = self.width
        h = self.height …
Run Code Online (Sandbox Code Playgroud)

python cairo

5
推荐指数
0
解决办法
739
查看次数

如何在C中包含和使用cairo图形库?

我最近从项目网站下载并安装了C的Cairo图形库.

我尝试使用网站常见问题解答中的给定代码来运行开罗的hello world程序.在Terminal中,我应用了同一页面给出的相同命令来编译它.但是当我尝试编译它时,出现了未定义引用的错误.

在此输入图像描述

在终端中,输出是:

 cc -o hello $(pkg-config --cflags --libs cairo) hello.c
 /tmp/cco08jEN.o: In function `main':
 hello.c:(.text+0x1f): undefined reference to `cairo_image_surface_create'
 hello.c:(.text+0x2f): undefined reference to `cairo_create'
 hello.c:(.text+0x4e): undefined reference to `cairo_select_font_face'
 hello.c:(.text+0x6d): undefined reference to `cairo_set_font_size'
 hello.c:(.text+0x89): undefined reference to `cairo_set_source_rgb'
 hello.c:(.text+0xbb): undefined reference to `cairo_move_to'
 hello.c:(.text+0xcc): undefined reference to `cairo_show_text'
 hello.c:(.text+0xd8): undefined reference to `cairo_destroy'
 hello.c:(.text+0xe9): undefined reference to `cairo_surface_write_to_png'
 hello.c:(.text+0xf5): undefined reference to `cairo_surface_destroy'
 collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我的源代码是:

#include <cairo.h> …
Run Code Online (Sandbox Code Playgroud)

c cairo

5
推荐指数
1
解决办法
2514
查看次数

X11:从叠加层绘制叠加/删除图形

我需要在X11中直接在屏幕上绘制一个形状(一个小箭头),它用作叠加层.我正在寻找大约一个小时没有没有好结果.任何人都可以为我提供一个很好的切入点吗?我可以使用的技术是cairo,gtk或XLib.

到目前为止我发现的所有东西都取决于构图,它并不总是可用,或者会在我的箭头(矩形,窗口)后面创建一个白色的形状.

编辑:我现在能够使用Composite和Cairo绘制X11叠加层.我是这样做的(注意:这是一个最小的例子.几乎没有错误检查!!!).从终端开始可以退出它!

// COMPILE WITH: g++ -o overlay overlay.cc -lXfixes -lXcomposite -lX11 `pkg-config --cflags --libs cairo`
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xfixes.h>
#include <X11/extensions/shape.h>
#include <cairo/cairo.h>
#include <cairo/cairo-xlib.h>

#include <stdio.h>
#include <unistd.h>

Display *display_;
int old_x_, old_y_;
cairo_surface_t *surf_;
Window overlay_;
int screen_;
int height_;
int width_;
cairo_t *cr_;


void paint_cursor(int new_x, int new_y, bool first = false)
{

    if (!first)
    {
        cairo_set_operator(cr_, CAIRO_OPERATOR_CLEAR);
        cairo_rectangle(cr_, old_x_, old_y_, 20, 20);
        cairo_fill(cr_);
    }
    old_x_ = new_x;
    old_y_ = new_y; …
Run Code Online (Sandbox Code Playgroud)

x11 gtk xlib cairo

5
推荐指数
1
解决办法
642
查看次数

cairosvg 已安装但导入错误

我刚刚安装了 cairosvg,它似乎奏效了。如果我尝试再次安装,它会说:

$ pip install cairosvg
需求已经满足(...)

但是如果我尝试在 python3 中导入它,它会提供一个导入错误:

>>>导入 cairosvg
回溯(最近一次调用最后一次):
(...)
ImportError:没有名为“cairosvg”的模块

任何想法这里出了什么问题?顺便说一句,我正在尝试将 .svg 文件转换为 .png 文件,如果有更简单的可能性,请随时告诉我!

cairo importerror python-3.x

5
推荐指数
1
解决办法
4951
查看次数

安装了 cairosvg 和 cairocffi 但在导入时出错

当我尝试安装时,cairosvg它说要求满足。

Requirement already satisfied: cairosvg in 
c:\users\kshitij\appdata\local\programs\python\python35\lib\site-packages
Requirement already satisfied: cairocffi in 
c:\users\kshitij\appdata\local\programs\python\python35\lib\site-packages 
(from cairosvg)
Requirement already satisfied: lxml in 
c:\users\kshitij\appdata\local\programs\python\python35\lib\site-packages 
(from cairosvg)
Requirement already satisfied: cssselect in 
c:\users\kshitij\appdata\local\programs\python\python35\lib\site-packages 
(from cairosvg)
Requirement already satisfied: pillow in 
c:\users\kshitij\appdata\local\programs\python\python35\lib\site-packages 
(from cairosvg)
Requirement already satisfied: tinycss in 
c:\users\kshitij\appdata\local\programs\python\python35\lib\site-packages 
(from cairosvg)
Requirement already satisfied: cffi>=0.6 in 
c:\users\kshitij\appdata\local\programs\python\python35\lib\site-packages 
(from cairocffi->cairosvg)
Requirement already satisfied: olefile in 
c:\users\kshitij\appdata\local\programs\python\python35\lib\site-packages 
(from pillow->cairosvg)
Requirement already satisfied: pycparser in 
c:\users\kshitij\appdata\local\programs\python\python35\lib\site-packages 
(from cffi>=0.6->cairocffi->cairosvg)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在 IDLE 中导入它时,它给出了以下错误:

import cairosvg
File "C:\Users\Kshitij\AppData\Local\Programs\Python\Python35\lib\site- …
Run Code Online (Sandbox Code Playgroud)

python cairo python-3.x

5
推荐指数
1
解决办法
857
查看次数

在 Windows 上使用 Python 将 SVG 转换为 PNG

问题:哪个可重现的过程可以使 Windows Python 用户将 SVG 图像渲染为 PNG?


许多问题/答案(例如Convert SVG to PNG in PythonServer-side SVG to PNG (or some other image format) in python,由于下面解释的原因,它们不重复)解释了如何使用 Python 将 SVG 转换为 PNG .

不幸的是,它们都不能用于 Python + Windows。经过 20 多分钟,以及许多不同的尝试,我仍然无法做到。有关失败尝试的更多详细信息:

python windows svg cairo

5
推荐指数
1
解决办法
1156
查看次数

标签 统计

cairo ×10

python ×5

python-3.x ×3

c ×2

c++ ×1

egl ×1

fonts ×1

gtk ×1

importerror ×1

librsvg ×1

macos ×1

opengl ×1

pango ×1

pycairo ×1

svg ×1

ubuntu-10.04 ×1

windows ×1

x11 ×1

xlib ×1