gpt4 book ai didi

javascript - 使用 canvas.toBlob 污染 Canvas

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:43 28 4
gpt4 key购买 nike

我正在尝试将 svg 转换为图像并提示用户下载。

var chart = $(svg.node())
.attr('xmlns', 'http://www.w3.org/2000/svg');
var width = that.svg_width;
var height = that.svg_height;
var data = new XMLSerializer().serializeToString(chart.get(0));
var svg1 = new Blob([data], { type: "image/svg+xml;charset=utf-8" });
var url = URL.createObjectURL(svg1);

var img = $('<img />')
.width(width)
.height(height);
img.attr('crossOrigin' ,'' );
img.bind('load', function() {
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img.get(0), 0, 0);
canvas.toBlob(function(blob) { // this is where it fails
saveAs(blob, "test.png");
});
});
img.attr('src', url);

Chrome 抛出异常,提示“未捕获的安全错误:无法在‘HTMLCanvasElement’上执行‘toDataURL’:可能无法导出受污染的 Canvas 。”在 canvas.toBlob

本案例不涉及跨源。 svg 在我正在转换为图像并尝试加载到 Canvas 中的同一页面上。那么 Canvas 是如何被污染的呢?我错过了什么吗?

最佳答案

经过一些挖掘发现https://code.google.com/p/chromium/issues/detail?id=294129 .我的 svg 有一个 < foreignObject >(基于 d3 的图表),这就是我遇到这个问题的原因。

使用数据 uri 而不是从 blob 加载 svg 解决了我的问题

关于javascript - 使用 canvas.toBlob 污染 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32735822/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com