html5导出错误,JavaScript:toDataUrl()抛出“安全错误:可能无法导出受污染的画布”. - 程序园...

作者探讨了如何在HTML5 canvas中从SVG源正确绘制图像,遇到Tainted Canvas异常,重点在于不涉及跨域图片的情况下,解决DOMURL.createObjectURL导致的安全问题,并寻求在Chrome环境下生成无污染PNG的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个

HTML5画布,我从svg中绘制一个图像.

HTML

JavaScript的

var DOMURL = window.URL || window.webkitURL || window;

var data = ''+

''+

'

'foreignObject {'+

'background-color: #000;'+

'color: #fff'+

'border-radius: 10px;'+

'}'+

'h1 {'+

'color: #2acabd;'+

'font: 25px arial;'+

'font-weight: bold;'+

'text-align: center;'+

'}'+

'h2 {'+

'margin: 0;'+

'color: #2acabd;'+

'font: 15px arial;'+

'}'+

'p {'+

'color: #fff;'+

'}'+

''+

'

'+

'

Heading

'+

'

'+

'

'+

'

Full Name

'+

'

Alan Johnson

'+

'

Date of Birth

'+

'

7th November 1988

'+

'

34329483028493284093284432

'+

'

'+

'

'+

'

'+

''+

'';

var canvas = document.getElementById("canvas");

var ctx = canvas.getContext("2d");

img = new Image();

img.setAttribute("crossOrigin", "anonymous");

var svg = new Blob([data], {type: 'image/svg+xml;charset=utf-8'});

var url = DOMURL.createObjectURL(svg);

img.onload = function() {

ctx.drawImage(img, 0, 0);

DOMURL.revokeObjectURL(url);

console.log(canvas.toDataURL());

}

img.src = url;

当我调用canvas.toDataURL()时,我得到了异常:

(index):98 Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

我已经在Stack Overflow上看到了与此异常相关的许多其他问题和答案.我的问题是不同的,因为(正如你所看到的)我不是在任何一点,包括我的svg或画布中来自另一个域的任何图像.

我猜测问题是我正在使用DOMURL.createObjectURL创建一个对象URL.

我知道在不同的浏览器中执行此操作存在一些兼容性问题,但此应用只​​需要在Chrome中运行.此外,直接在画布上绘制文本不是一个选项,我必须通过svg.

关于如何解决这个问题,并成功获得我的画布的PNG的任何想法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值