javascript - 如何将base64 svg图像转换为base64图像png

标签 javascript

我有一个将图表转换为 svg 的代码。但我需要输出格式为 PNG 图像。 svgString2Image 是返回编码的 Base64 svg 的函数。我该怎么做?非常感谢。

function svgString2Image( svgString, width, height, format, callback ) {
  //console.log("svgString",svgString)
    format ? format : 'png';

    var imgsrc = 'data:image/svg+xml;base64,'+ btoa( unescape( encodeURIComponent( svgString ) ) ); // Convert SVG string to data URL
    var canvas = document.createElement("canvas");
    var context = canvas.getContext("2d");

    canvas.width = width;
    canvas.height = height;

    var image = new Image();
    image.onload = function() {
        context.clearRect ( 0, 0, width, height );
        context.drawImage(image, 0, 0, width, height);

        canvas.toBlob( function(blob) {
            var filesize = Math.round( blob.length/1024 ) + ' KB';
            if ( callback ) callback( blob, filesize );
        });

    };
    ///****************************
  document.getElementById('my_image').src=imgsrc;
    return image.src = imgsrc;

}

http://plnkr.co/edit/lPhmuYywPCdjQrnwhQcH?p=preview

最佳答案

正如 @guest271314 和我在评论中所说,使用 canvas.toDataURL当不需要 base64 字符串时,canvas.toBlob 。另外 image.onload 是异步的,因此不可能“返回”base64 png 字符串。您必须使用回调(或 Promise 如@guest271314所述)。

function svgString2Image(svgString, width, height, format, callback) {
    // set default for format parameter
    format = format ? format : 'png';
    // SVG data URL from SVG string
    var svgData = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svgString)));
    // create canvas in memory(not in DOM)
    var canvas = document.createElement('canvas');
    // get canvas context for drawing on canvas
    var context = canvas.getContext('2d');
    // set canvas size
    canvas.width = width;
    canvas.height = height;
    // create image in memory(not in DOM)
    var image = new Image();
    // later when image loads run this
    image.onload = function () { // async (happens later)
        // clear canvas
        context.clearRect(0, 0, width, height);
        // draw image with SVG data to canvas
        context.drawImage(image, 0, 0, width, height);
        // snapshot canvas as png
        var pngData = canvas.toDataURL('image/' + format);
        // pass png data URL to callback
        callback(pngData);
    }; // end async
    // start loading SVG data into in memory image
    image.src = svgData;
}

// call svgString2Image function
svgString2Image(svgString, 800, 600, 'png', /* callback that gets png data URL passed to it */function (pngData) {
    // pngData is base64 png string
});

关于javascript - 如何将base64 svg图像转换为base64图像png,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46814480/

相关文章:

javascript - jQuery - 检查是否选择了多个单选按钮组,然后返回那些没有选择的名称

javascript - 当用户点击链接时插入 MySQL 数据库

javascript - 如何将样式作为默认样式应用到我的组件

javascript - 如果附加函数是闭包,如何删除事件监听器?

javascript - 重定向到随机页面(当前页面除外)

javascript - 何时以及为何使用“调用申请”?

javascript - jQuery - 更改页面上的所有 URL 包括 CSS 和 JavaScript 文件

javascript - 如何在 Angular 输出中通过 "get"获得信息?

javascript - 验证 PHP 中的字符串以获取 JSON 输出

javascript - 如何等到循环内的异步进程完成后再退出循环?