如何使用 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")
我应该怎么做才能使图像内容与 cairo canvas 大小相同? 我尝试过,
svg.set_property('width', 500)
svg.set_property('height', 500)
但得到了
TypeError: property 'width' is not writable
librsvg python 绑定的文档似乎极其罕见,只有开罗网站上的一些随机代码片段。
When rasterizing svg file, I would like to be able to set width and height for the resulting png file. With the following code, only the canvas is set to the desired width and height, the actual image content with the original svg file dimension is rendered in the top left corner on the (500, 600) canvas.
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")
What should I do to make the image content same size with cairo canvas? I tried
svg.set_property('width', 500)
svg.set_property('height', 500)
but got
TypeError: property 'width' is not writable
Also documents for librsvg python binding seem to be extremely rare, only some random code snippets on cairo site.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有一个 调整大小librsvg 中的函数,但已弃用。
在开罗设置比例矩阵来更改绘图的尺寸:
There is a resize function in librsvg, but it is deprecated.
Set up a scale matrix in Cairo to change the size of your drawing:
这是适合我的代码。
它实现了上面 Luper 的答案:
This is the code that works for me.
It implements the answer by Luper above:
以编程方式调整 svg 文件大小并不明显。 其他答案在这里提供的解决方案可能已经过时/难以实施。 我正在使用另一个库 svgutils。
以下应该有效。
您可以像平常一样安装 svgutils -
一旦正确调整了 svg 文件的大小,您就可以使用 ffmpeg 或任何其他图像转换器将其保存为 png。
Resizing svg files programmatically is not obvious. The solution provided here by other answers may be outdated/difficult to implement. I'm using another library svgutils.
The following should work.
You can install svgutils with usual -
Once you have properly resized svg file, you can use ffmpeg or any other image converter to save it into png.