首页 > 其他分享 >canvas 中使用跨域的图片

canvas 中使用跨域的图片

时间:2023-03-20 16:59:43浏览次数:44  
标签:canvas const downloadedImg alt 图片 跨域

一张跨域的图片直接在canvas中使用控制台是会给出警告的:

Error: SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

原因是尽管不通过 CORS 就可以在 canvas 中使用其他来源的图片,但是这会污染画布,并且不再认为是安全的画布,这将可能在 canvas 检索数据过程中引发异常。

如果外部源的内容是 HTML <img> 或 SVG <svg> 元素,会阻止从 canvas 中读取数据。

如果外部源图片是作为 HTMLCanvasElement 或 ImageBitMap 获取的,且图片源不符合同源准则,会阻止读取 canvas 的内容。

解决方式:为图片提供设置 crossorigin 属性

代码:

<!DOCTYPE html> <html lang="zh_CN">   <head>     <meta charset="UTF-8" />     <meta http-equiv="X-UA-Compatible" content="IE=edge" />     <meta name="viewport" content="width=device-width, initial-scale=1.0" />     <title>Document</title>   </head>   <body>     <div id="imageBox"></div>     <script>       let imageURL =         "https://cdn.glitch.com/4c9ebeb9-8b9a-4adc-ad0a-238d9ae00bb5%2Fmdn_logo-only_color.svg?1535749917189";       let imageDescription = "The Mozilla logo";       downloadedImg = new Image();       downloadedImg.crossOrigin = "Anonymous"; // 核心代码       downloadedImg.addEventListener("load", imageReceived, false);       downloadedImg.alt = imageDescription;       downloadedImg.src = imageURL;       function imageReceived() {         const canvas = document.createElement("canvas");         const context = canvas.getContext("2d");
        canvas.width = downloadedImg.width;         canvas.height = downloadedImg.height;         canvas.innerText = downloadedImg.alt;
        context.drawImage(downloadedImg, 0, 0);         imageBox.appendChild(canvas);
        try {           localStorage.setItem(             "saved-image-example",             canvas.toDataURL("image/png")           );         } catch (err) {           console.error(`Error: ${err}`);         }       }     </script>   </body> </html>

标签:canvas,const,downloadedImg,alt,图片,跨域
From: https://www.cnblogs.com/shidawang/p/17236865.html

相关文章

  • 图片转pdf
    引用iTextSharpdllitextsharp.dll(版本5.5.13.3)、Spire.Pdf.dll(版本9.2.6.0)///<summary>///图片转pdf///</summary>///<paramname......
  • 手撸图片压缩工具
    前一段时间因为要将一些生活照片传给别人,由于是相机拍的单张图片普遍在10M以上,于是就想着把这些大尺寸图片简单进行下压缩 上百度找了一圈图片压缩软件,发现要不是不好......
  • element的upload 图片上传主函数
    /**图片上传*/asyncUploadImage(event,file,filelist){//清空坐标this.formModel.ITEM_XY=[0,0]this.imgX=0this.......
  • 设置Ajax跨域支持post提交
    ajax跨域提交默认get传参  需要后端配置支持post提交<script>$.ajax({dataType:'jsonp',jsonp:'callback',data:{data:data},url:url,......
  • Winform-ToolStripButton实现高清红黄绿指示灯(改善图片造成的模糊)
     //自定义控件(ToolStripButton)publicpartialclassRoundButton:ToolStripButton{protectedoverridevoidOnPaint(PaintEventArgspevent)......
  • element的图片上传预处理函数
      /**图片格式和大小的控制*/beforeAvatarUpload(file){//允许上传jpg和png格式的图片constisJPG=file.type==="image/jpeg"||f......
  • 实现点击 WebView 中的图片,调用原生控件展示图片
    现在有很多时候,我们的App都进行了混合开发,而最简单,最常用的就是有些网页采用了WebView进行展示,这就需要我们了解和懂得如何实现WebView和JS进......
  • winform绘图与前端canvas绘图效率对比
    先说结论:前端canas的绘图效率更高。因为项目使用winform的缘故,最近要实现一些波形展示的功能。涉及到绘制,肯定离不开GDI+的内容,但是还有替代的方案吗?当然是有的,可双用Web......
  • 简单好用的图片取色器【可取RGB数值】
    前言没想到​​Snipaste​​​除了可以截图,还可以进行取色。可以使用​​Snipaste​​来进行颜色的提取。使用步骤1、按下快捷键F1,进行截图(可以修改快捷键截图的方式)2、选择......
  • 初识跨域、跨域资源共享
    初识跨域1、初识跨域同域,不是跨域consurl='./index.html';不同域,跨域,被浏览器阻止consturl='https://www.imooc.com';consxhr=newXMLHttpRequest();向同......