本文摘自PHP中文网,作者不言,侵删。
这篇文章主要介绍了详解canvas绘图时遇到的跨域问题的相关资料,内容挺不错的,现在分享给大家,也给大家做个参考。当在canvas中绘制一张外链图片时,我们会遇到一个跨域问题。
示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< title >crossorigin</ title >
</ head >
< body >
< canvas width = "600" height = "300" id = "canvas" ></ canvas >
< img id = "image" alt = "" >
< script >
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var image = new Image();
image.onload = function() {
ctx.drawImage(image, 0, 0);
document.getElementById('image').src = canvas.toDataURL('image/png');
};
image.src = 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=3497300994,2503543630&fm=27&gp=0.jpg';
</ script >
</ body >
|
当在浏览器中打开这个页面时,你会发现这个问题:
Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
这是受限于 CORS 策略,会存在跨域问题,虽然可以使用图像,但是绘制到画布上会污染画布,一旦一个画布被污染,就无法提取画布的数据,比如无法使用使用画布toBlob(),toDataURL(),或getImageData()方法;当使用这些方法的时候 会抛出上面的安全错误
这是一个苦恼的问题,但幸运的是img新增了crossorigin属性,这个属性决定了图片获取过程中是否开启CORS功能:
阅读剩余部分
相关阅读 >>
canvas波浪效果的实现代码
详解canvas实现圆弧、圆环进度条的实例方法
html5联合canvas实现图片压缩
canvas实现高阶贝塞尔曲线
html5 canvas实现画直线与设置线条的样式
使用canvas设计出一个简易的画板
canvas 学习 3---画坐标系
canvas实现动态粒子连线效果(附代码)
关于canvas的一个实例教程--刮刮乐
html5 canvas平铺的代码详解
更多相关阅读请进入《canvas》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 如何解决canvas绘图时遇到的跨域问题