如何将缩放的SVG渲染到QImage?

Fra*_*nki 20 qt svg image

模块中有一个QSvgRendererQtSvg可以渲染图像QPaintDevice.这个可以QImage.在这种情况下,我们将创建:

Image svgBufferImage(renderer.defaultSize(), QImage::Format_ARGB32);
Run Code Online (Sandbox Code Playgroud)

但是如何QImage从SVG渲染器渲染到与默认大小不同的大小?由于SVG格式图像可以在没有质量损失的情况下进行缩放,是否可以使用QSvgRenderer?生成SVG文件中的静态图像,如PNG .

有没有人有更好的主意?基本上我需要从不同大小的SVG文件创建像PNG这样的图像.

Mat*_*Mat 43

只需给你QImage想要的尺寸.SVG渲染器将缩放以适合整个图像.

#include <QApplication>
#include <QSvgRenderer>
#include <QPainter>
#include <QImage>

// In your .pro file:
// QT += svg 

int main(int argc, char **argv)
{
    // A QApplication instance is necessary if fonts are used in the SVG
    QApplication app(argc, argv);

    // Load your SVG
    QSvgRenderer renderer(QString("./svg-logo-h.svg"));

    // Prepare a QImage with desired characteritisc
    QImage image(500, 200, QImage::Format_ARGB32);
    image.fill(0xaaA08080);  // partly transparent red-ish background

    // Get QPainter that paints to the image
    QPainter painter(&image);
    renderer.render(&painter);

    // Save, image format based on file extension
    image.save("./svg-logo-h.png");
}
Run Code Online (Sandbox Code Playgroud)

这将从传入的SVG文件中创建500x200 PNG图像.

使用SVG徽标页面中的SVG图像输出示例:

在此输入图像描述


Yas*_*ash 5

这是完整的答案:

QImage QPixmap::toImage() 
Run Code Online (Sandbox Code Playgroud)

如果像素图具有 1 位深度,则返回的图像也将是 1 位深。具有更多位的图像将以最接近底层系统的格式返回。通常这将是 QImage::Format_ARGB32_Premultiplied 对于具有 alpha 的像素图和 QImage::Format_RGB32 或 QImage::Format_RGB16 对于没有 alpha 的像素图。

QImage img = QIcon("filepath.svg").pixmap(QSize(requiredsize)).toImage()
Run Code Online (Sandbox Code Playgroud)

也从上面的答案复制

// Save, image format based on file extension
image.save("./svg-logo-h.png");
Run Code Online (Sandbox Code Playgroud)