问题标签 [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 回答
288 浏览

css - librsvg css 不匹配后代选择器

我试图用来librsvg渲染一些以 SVG 格式生成的图表(一个更大的项目的一部分)。但是,渲染结果看起来与在 Web 浏览器中打开 SVG 文件时的外观完全不同。

通过一点一点地拆开 SVG 文件,我发现其中一个关键原因是我的 CSS 样式没有被应用。

这是一个mcve

在网络浏览器中,它看起来像这样: 网页浏览器渲染

当我使用此命令转换为 png 时:

它看起来像这样: lbrsvg 渲染

您可以看到填充和描边未应用于路径,因此它显示为黑色矩形。

如果我将 CSS 更改为:

然后它的样式正确。

这里发生了什么?librsvg 肯定支持像 CSS 后代选择器这样基本的东西吗?我查看了文档,发现没有提到这样一个基本限制。

还是我以某种只能在浏览器中使用的方式使用 CSS?

我正在使用 librsvg 2.39.0。

0 投票
3 回答
456 浏览

php - 如何从 Mediawiki 中的低分辨率 SVG 中获取高分辨率缩略图?

我不完全知道如何正确表达这个问题,所以我会尝试一下:

看到这个页面上的光栅化 SVG 了吗?看起来很扭曲,而且 - 对不起,语言 - 相当糟糕。现在让我们将其与此处的进行比较。它们都具有完全相同的 SVG 文件,并且源代码在 wikitext 中是相同的。不同之处在于光栅化的“缩略图”是如何生成的,看起来。

MediaWiki 给我的结果

我从 MediaWiki 得到的结果。

预期结果

预期的结果。

从我注意到的情况来看——如果我错了,请纠正我——维基百科和维基百科要么为 SVG 创建几个光栅化缩略图,要么只是根据页面所需的大小按需生成它们。然而默认情况下,MediaWiki 只生成一个缩略图,这意味着它与原始 SVG 具有相同的分辨率 - 当将小 SVG 光栅化为大图像时,这会给我们带来模糊和 **** 的光栅图像。

要么,要么SVG在缩略图/光栅化之前没有被缩放/调整大小,当它们应该的时候。

只是提醒一下,这里有一些来自我的 LocalSettings.php:

那么...如果缺少缩略图是问题的原因,我该如何启用多个缩略图?这甚至是问题的根源吗?如果没有,我没有得到预期结果的真正原因是什么?我能做些什么?

编辑:已经通过切换到 ImageMagick 到 RSVG 来解决。

0 投票
0 回答
992 浏览

pdf - rsvg-转换pdf和纸张大小

我使用 rsvg-convert 将 SVG 转换为 PDF(效果很好,也适用于大文件)。

SVG 文件是可扩展的,并且在内部我使用 mm 单位,所以如果文档是 1200x1500 对我来说它是 1.2m 宽和 1.5m 长。

RSVG 创建纸张尺寸为 423x529mm 的 PDF 文档(如果使用的宽度/高度参数为 2400x3000 -> 846x1058),所以有一些常数 ~2.3868 我必须乘以宽度/高度才能获得正确的纸张尺寸。但 X 和 Y 不完全相同,1200/423 != 1500/529(也许我看到纸张大小四舍五入到整数)。

这个常数是什么?我尝试了不同的 DPI,但似乎与此无关。

我的转换命令很简单

0 投票
1 回答
463 浏览

ruby - Ruby中的Base64 jpg到base64 Png

我正在使用 base64 文件,我想将 base64jpg 图像转换为 base64png 图像。有没有办法做到这一点?

原因是我正在使用 rsvg-convert 将 svg 文件转换为 png 文件,但是当我的 svg 中有 base64jpg 时,它不起作用,但它适用于 base64 文件。

0 投票
0 回答
1173 浏览

imagemagick - Rsvg转换不适用于路径文本

我正在尝试将 svg 文件解析为 png 格式。

这是我的 svg 文件:https ://cdn-imgs-p.stackprint.net/spree/images/62398/original/preview_01.svg

使用 rsvg-convert --unlimited preview_01.svg > preview.png时,路径字体未正确转换:

这是我的输出 png 文件:https ://s3-us-west-2.amazonaws.com/carga-masiva/preview.png

我不知道这是否是一个错误,或者有一个解决方法可以使它工作。

我的 rsvg 版本是2.40.19

0 投票
2 回答
1856 浏览

php - Imagick通过rsvg转换SVG从PHP呈现图像空白,但从命令行可以

我已经阅读了一系列问题和网络文章,但似乎遇到了一堵砖墙。我已将我的问题简化为一个非常简单的 SVG 文件,其中包含一个图像。当通过 imagick 从 PHP 转换时,图像呈现为空白,但从命令行使用相同的 rsvg 引擎呈现良好。

这个项目在我当地的 Fedora 开发机器上运行得就像一个魅力,只有当我在 Centos 上进行生产时才遇到这个问题。

环境:Centos 6.2 服务器,PHP 5.6.36 使用 php-fpm,Imagick 模块版本 3.4.3 使用 ImageMagick 库版本 6.7.8-9 2016-06-16

注意:我的 apache 服务器根本没有监狱或 chroot 文件系统,所以所有正常的路径引用应该可以正常工作,例如它使用绝对路径名写入 web 根目录中的日志文件没有问题。

所以我相信“SVG”格式表明它将使用 RSVG 进行 PHP 的转换。

我的 SVG(从 Inkscape 保存):

我的PHP代码:

来自命令行的相同尝试:

相同的使用rsvg-convert(如上面的代表输出所示):

结果:命令行尝试cli.jpgrsvg-convert.jpg,都显示图像很好。PHP 的尝试显示空白输出,即<image>元素未呈现。

没有抛出异常,也没有我能找到的错误输出。

我努力了:

  • 使xlink:href成为file://具有绝对路径的 URL,即xlink:href="file:///home/myuser/public_html/test/svg-problem/image.jpg"
  • 使xlink:href成为file://相对于路径当前目录的URL,即xlink:href="file://./image.jpg"
  • 将其设为没有路径xlink:href的URL,即file://xlink:href="file://image.jpg"
  • 使用 .强制使用“RSVG”$im->setFormat('RSVG')会引发异常Unable to set format。我不明白为什么。

由于通过 PHP 的转换无需调用即可完成setFormat,并且上面显示的格式列表表示默认情况下它将使用 RSVG,我认为它正在使用 RSVG,即使我尝试强制 RSVG 格式失败。

我已经读到您可以重新编译 rsvg 库以在无法加载文件时显示更多错误输出,但是在我的生产 cPanel 托管服务器上,我非常不愿意尝试重新编译任何东西。

任何想法接下来要尝试什么?把我的头发拉在这里:)

0 投票
2 回答
636 浏览

svg - 如何让 rsvg 为 SVG 假设 96 dpi?

当我使用

我得到的结果与在 Inkscape 和 Firefox 中呈现 SVG 的方式不同。

这是一个简单的测试 SVG:

在 Inkscape 和 Firefox 中,middel 和 right 文本的大小完全相同,因为这些应用程序似乎假设 1pt = 1.333333px,这是 CSS 推荐的。但是, rsvg 似乎假设 1pt = 1.25px 导致文本大小不同。如何让 rsvg 正确输出(如 Inkscape 和 Firefox)。

我尝试了这些选项,-p但也没有给出正确的结果。-d96

0 投票
1 回答
295 浏览

c++ - librsvg 和 cairo;rsvg_handle_render_cairo() 失败;我究竟做错了什么?

我在一个项目中玩弄一些代码;特别是一个获取 SVG 图像并从中生成 png 的函数。

我有这个:

但它失败了rsvg_handle_render_cairo......我不知道为什么。使用 rsvg_handle_new_from_file (不使用 BinaryBuffer 结构)的函数的先前版本工作正常。但是请注意,在其他地方使用基本相同的 struct 和 readFile 函数没有任何问题。从我放在那里的调试消息中,我可以看到该文件确实正在被读取。我也从我的 svg 文件中获得了正确的尺寸,并且在调用渲染函数之前似乎没有任何错误(所以我假设它被解析好了)但也许不是?

0 投票
2 回答
2131 浏览

svg - 将 SVG 转换为具有锐利边缘的 PNG

我需要转换图像以进行对象检测。我从具有多个多边形的 svg 图像开始。例子:

结果是黑色背景,对象 A 的颜色为 rgb(221,221,221),对象 B 的颜色为 rgb(50,50,50),并且两个对象的任何位置重叠 rgb(160,160,160)。检测算法(不能修改)通过像素值确定对象。

我已经使用inkscape、svgr-convert 或ImageMagikk 成功地将svg 转换为png。然而,这些 png 图像的边缘总是模糊的,这会干扰我的对象检测。

有什么方法可以转换有清晰的边缘?此图像显示了添加具有不正确值的模糊像素的转换。我已经放大了边缘以使其明显。

编辑:完整图像示例

0 投票
1 回答
829 浏览

svg - C++ Cairo + RSVG - 绘制时设置 SVG 颜色

我正在尝试在开罗表面上绘制单色 SVG,但它被渲染为白色,而我希望它是黑色的。Cairo 表面是一个 8 位 alpha 表面 (CAIRO_FORMAT_A8),所以我只处理灰度。

我正在对其进行测试的图像如下:https://commons.wikimedia.org/wiki/File:Octicons-flame.svg

这是我用来渲染的代码:

这将输出以下内容:

开罗输出

但正如您所看到的,火焰呈现为白色,我希望它是黑色 - 或特定的 alpha 值。

任何帮助将不胜感激,我在开罗找不到太多关于 SVG 颜色的信息。

非常感谢。