问题标签 [librsvg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2621 浏览

javascript - 在不使用边界框的情况下获取 svg 路径的尺寸

有没有办法获取 svg 路径的尺寸并将其显示在 div 中?边界框不是一个选项,因为当涉及到贝塞尔曲线时,它在 Webkit 中是错误的。我正在修改 svg-edit 顺便说一句:https ://code.google.com/p/svg-edit/

这是我目前使用的。

不幸的是,边界框是不可靠的。除了bbox还有什么想法吗?

0 投票
0 回答
873 浏览

javascript - 使用javascript将重叠的svg路径焊接成一个路径

有没有办法使用javascript将2个重叠的svg路径焊接成一个统一的单一路径?

0 投票
1 回答
510 浏览

svg - 将 Poilu raphael 布尔运算(联合、减法)与 SVG 编辑集成

我正在修改 svg-edit,更具体地说是 Mark McKays Method draw:https ://github.com/duopixel/Method-Draw 。

我想使用我发现的这个 Raphael 库:https ://github.com/poilu/raphael-boolean ,它允许我对画布内的路径执行布尔(设置)操作。

现在我已经在编辑器中实现了一个按钮来启动一个功能:

好的,单击按钮后,编辑器不应该返回带有椭圆的联合(焊接)路径吗?

还是我弄错了?

我认为var paper = Raphael("canvas", 250, 250); 必须改变一些东西。行,因为 svg-edit 为画布使用了不同的名称,但我不知道该怎么做。

任何帮助将不胜感激,因为我已经为此苦苦挣扎了一段时间。

更新:该库无法处理多对象焊接、自相交和许多其他情况。只有当我们想对 2 个简单对象执行操作时,它才有效。这可能不会立即与手头的问题相关,但我认为无论如何提及它是明智的。

如果您正在寻找 SVG 元素上的布尔运算,请参阅此问题:SVG 路径上的布尔运算

0 投票
2 回答
205 浏览

libxml2 - 由于 libxml2 导致 librsvg 崩溃?

我希望支持将 SVG 图像渲染为位图,我正在使用 librsvg。到目前为止,它运行良好,并且使用 Cairo 进行绘制,万岁!但是我遇到了一个问题:

我们有一个类似于 Windows 资源管理器的控件,例如,它在目录中创建文件的缩略图大小的图像,因此该产品将被扩展为生成 SVG 的缩略图。

它使用后台线程来生成缩略图图像,因此 UI 在工作时不会被冻结。该代码已投入生产很长时间,因此就并发问题而言没有问题。但是,当从主线程以外的线程调用 rsvg_handle_new() 时,似乎会发生访问冲突,而不是我使用 librsvg 没有问题。

查看堆栈跟踪,崩溃似乎发生在 xmlSetGlobalState() 的 libxml2(这是 librsvg 的依赖项)中,问题似乎与此处报告的libxml2 crash on second use on Windows相同 ,似乎没有解决方案. 如果可以的话,我会将库的使用限制在主线程上,但我坚持使用现有的架构,它会在主线程之外生成缩略图。

我发现http://www.xmlsoft.org/threads.html建议首先在主线程中调用 xmlInitParser() ,这似乎是在创建 RsvgHandle 期间由 librsvg 调用的(我认为)。

所以我不确定这是否真的是 libxml2 问题,librsvg 使用 libxml2 的方式有问题,还是我尝试使用 librsvg 的方式有问题?

有任何 libxml2 或 librsvg 专家吗?

0 投票
1 回答
757 浏览

svg - 在 SVG 中为动画缩放文本的问题

我正在使用 SVG 生成视频动画,我制作了一系列图像并将其转换为视频文件。我需要的一种效果是能够平滑地平移/缩放文本。我试图通过对包含文本的图形上下文应用转换来做到这一点。每一帧的比例/平移都有很小的变化。这种技术对于静态图像效果很好。但不适用于文本。我看到的效果并不像您期望的那样平滑。从一帧到另一帧的文本有一定的抖动/闪烁。就好像字体渲染规则在转换后(而不是转换前)被应用。

所以问题是:如何用文本实现平滑的缩放/平移效果?

一帧示例:

这是一个演示我的意思的视频剪辑: http ://www.youtube.com/watch?v=TrEjDeGlPhA&list=UUfWuDb3rpD5OInqUpNivjdA&index=1

或者您可以从头开始创建:我编写了一个小的 Java 程序来生成这些帧,并创建一个 AVI 文件来演示(假设 Linux、mencoder、rsvg-convert 可用)。

这个脚本要运行:

0 投票
1 回答
2524 浏览

svg - ImageMagick (RSVG) 不会在 SVG 中导入图像

我正在尝试使用 ImageMagick 将 SVG 文件转换为 PNG。

SVG文件如下:

无论我使用哪种方法,最终结果都不包含图像。其他 SVG 元素已正确渲染。

我试过了:

我尝试将图像路径更改为使用 file:///、绝对路径、远程 url 和每个的 url 编码变体。我还使用和不使用 doctype 格式化了我的文件。

我正在使用 librsvg 2.36.3 和 ImageMagick 6.8.0-10 我已经能够使用 phantomjs 来转换它们,但对于这项任务来说似乎有点矫枉过正。

请帮忙!

0 投票
1 回答
243 浏览

svg - ImageMagick 读取 SVG 的结果出乎意料

我有一个关于 IM 阅读 SVG 图像的问题,这真的让我很困扰。对于下面的 SVG 图像,

当我使用identify -verbose sample.svg时,我得到了“几何:1x1+0+0”的结果。但其他人得到“几何:100x100+0+0”。似乎 100x100 是正确的。为什么会发生这种情况?

0 投票
1 回答
2635 浏览

c++ - 使用 C/C++ 打开和编辑 SVG 文件

我正在开发一个必须使用 SVG 形状来创建图表的编辑器。为了打开和显示 SVG,我使用了 librsvg,它实际上非常好,但仅用于渲染 SVG 而不是编辑它们。

我想访问形状的属性并更改它们的值(即宽度、大小)。

我使用 Cairo 将它们绘制到屏幕上,但我不想使用 cairo 的缩放功能,因为它与更改形状的大小不同。

我在 Win32 上使用 C++ builder XE3。

有谁知道我可以用来做的一个好的 C/C++ 库吗?

谢谢你的帮助。

0 投票
1 回答
111 浏览

vala - 扩展 librsvg vapi

可用于 librsvg-2.0 的 vapi 文件包含的内容比实际库包含的要少得多

vapi:http ://valadoc.org/#!wiki=librsvg-2.0/index

库:https ://git.gnome.org/browse/librsvg/tree/

我本来希望能够访问像 RsvgNode 这样的组件,以便能够直接访问和更改 SVG 内容,但是 vapi 和随 devel 包一起安装的头文件都不包含库头文件中的很多内容。我认为这与使库 GObject 友好有关,但我感兴趣的不仅仅是那里的东西。

有没有办法添加标题、扩展 vapi 并使用我需要的结构和函数?

有可能这甚至不是我应该做的,库的内容使用 G_GNUC_HIDDEN 宏非常自由地暗示他们不想给你访问权限。但后来我想知道如何在开罗上下文中显示 SVG 文档/元素时对其进行实时编辑?我确定我可以使用 libxml 对其进行编辑,但我不知道如何在不重新加载 SVG 数据和重新创建表面的情况下刷新上下文。

谢谢。

0 投票
1 回答
336 浏览

pinvoke - 为什么不推荐使用的“rsvg_pixbuf_from_file_at_size”比不推荐使用的方法(开罗)更快/更有效?

我正在使用 C# 和 P/Invoke 来访问 GDK 库。我的目标是将一组 SVG 文件转换为光栅图像(特别是 png),并且使用 GDK 库似乎是最可靠/准确的。

在阅读了一些 Gnome/Cairo 文档之后,我发现了两种基本方法来实现这一点。其中一种方法使用不推荐使用的函数,而另一种则不使用。

第一种方法已被弃用,但可以说更简单/直接,基本上看起来像这样:

第二种方法并未被弃用,它涉及设置 Cairo Surface,渲染它,然后将其保存到文件中。它看起来基本上是这样的:

这两种方法似乎都有效 - 它们生成正确的光栅图像输出(尽管当我尝试并行执行一堆操作时,“Cairo 方式”存在一些错误 - 我最终会耗尽内存)。

我的问题是:为什么旧的/不推荐使用的方式(rsvg_pixbuf_from_file_at_size明显快于新的/开罗方式?我的测试显示第一种方法更快(一个文件/多个文件,标准 C# ForEach/Parallel.ForEach)。

例如,对于 16 个输入文件(输出尺寸为 6000x4200)并且没有并行处理,第一种方法需要大约 2:15.89 秒。第二种方法大约需要 2:37.95。使用并行处理(Parallel.Foreach 调用我的 P/Invoke 代码),结果是相似的——MaxDegreesOfParallelism设置为默认值时,不推荐使用的方法需要 30.7 秒,而 Cairo 方法需要 36.95 秒。

开罗似乎也使用了更多的内存。此外,除了简单地为每次转换使用更多资源之外,Cairo 似乎也不知道如何避免使用我所有的 RAM。例如,如果我将输入文件的数量从 16 个增加到 720 个,并使用 Parallel.ForEach 循环,我最终会得到 0 MB 的可用 RAM,并且系统会停止运行(最终,调试进程退出,我的系统又回来了……但它锁定了一分钟左右)。

我的问题的简单答案是只使用不推荐使用的方法,但为什么不推荐使用它?开罗方法在任何方面都更好吗?

如果有人想查看更多我的代码,请告诉我,我会添加它。我试图将我发布的代码缩减为相关位(实际的 P/Invoke 代码,而不是调用它的 C# 代码)。