canvas绘制图片,由于浏览器的安全考虑,如果在使用canvas绘图的过程中,使用到了外域的图片资源,那么在toDataURL()时会抛出安全异常:
Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
解决方案1.
如果想使用toDataURL()生成图片文件的话,在canvas绘图过程中使用的图片应该是当前域下的。
解决方案2.
访问的服务器允许,资源跨域使用,也就是说设置了CORS跨域配置,Access-Control-Allow-Origin
然后在客户端访问图片资源的时候
var img = new Image(); img.setAttribute('crossOrigin', 'anonymous'); img.src = url;
实例说明:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /> <link href="../scripts/Bootstrap-3.3.6/css/bootstrap.min.css" rel="stylesheet" /> <script src="../scripts/jquery-1.11.3.min.js"></script> <script src="../scripts/Bootstrap-3.3.6/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <img src="http://www.gongjuji.net/favicon.ico" crossorigin="anonymous"/> <canvas id="canvasOne" width="200" height="200"></canvas> </div> <script> /* * 将canvas图片转换成图片,上传到服务器 */ var canvas = document.getElementById('canvasOne'); var ctx = canvas.getContext('2d'); ctx.fillStyle = 'red'; ctx.fillRect(0, 0, canvas.width, canvas.height); //添加外网图片 var img = new Image(); //设置图片跨域访问 //img.setAttribute('crossOrigin', 'anonymous'); img.onload = function () { //画图 ctx.drawImage(img, 0, 0, img.width, img.height); var data = canvas.toDataURL('image/jpeg'); alert(data); } //使用外网图片 img.src = 'http://www.gongjuji.net/favicon.ico'; </script> </body> </html>
来自: http://www.cnblogs.com/tianma3798/p/5920106.html
那么,对于服务器不允许跨域资源访问的图片该怎么办那?
分类:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架