这两天接到一个需求,需要做一个图片裁剪功能。找到了cropper.js,使用起来算是顺手,在做到将截好的图片以base64的形式上传保存的时候,突然遇到了一个之前没有碰到过的问题,没错就是:图片跨域问题。

网上搜锁了一下跨域图片使用toDataURL转换为base64的方法,没错,想必大家也肯定都知道了。

给Img标签设置crossOrign属性,将值设置为""或"Anonymous",事实上如果crossOrigin属性不设置为“use-credentials”,设置为其他的值时,都默认等同于“Anonymous”。

如此设置好后,满心欢喜的去测试,此时的代码如下

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><input type="text" name="picUrl"><button onclick="test()">测试</button>
</body>
<script>function test(){var url = document.getElementsByName("picUrl")[0].value;var canvas = document.createElement("canvas");var ctx = canvas.getContext('2d');canvas.width = 100;canvas.height = 100;var img = new Image();//设置图片跨域访问img.crossOrigin = 'anonymous';img.src = url;document.body.appendChild(img);img.onload = function () {ctx.drawImage(this,0,0,100,100);var base64 = canvas.toDataURL('image/jpg', 1);console.log(base64)};}
</script>
</html>

但是结果却是:

报错:图片跨域无权限访问

百思不得其解,明明都设置好了啊,只好继续在百度中探索,但是凭借自己的关键字,搜来搜去都是一样的内容,而且感觉还都是互相复制粘贴的,几乎都快失望了。终于功夫不负有心人,说是因为浏览器使用本地缓存的问题,需要禁止浏览器使用缓存。

如法炮制,在控制台的network里将disablecache勾上以后,满心欢喜的再度尝试!yeah,OK了。But!!!!反转又来了,当你将控制台关掉后,disablecache是无效的,所以说你每次使用这个功能的时候都得开着控制台,那可真是要了命了,不得被人喷死啊!心情又down了下来,又开始了漫长的搜寻之路。终于终于,让我看到了一篇帖子,提到了使用时间戳来解决问题,犹如醍醐灌顶啊,最终解决了这个问题。

发这个帖,最主要的原因是自己觉得解决这个问题花费了太多时间,其实就是一个小细节,希望能帮助更多的人节省时间。另一点就是想说,百度搜索出来有效的帖子太少了,都是互相粘贴。

最终版的代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><input type="text" name="picUrl"><button onclick="test()">测试</button>
</body>
<script>function test(){var url = document.getElementsByName("picUrl")[0].value;var canvas = document.createElement("canvas");var ctx = canvas.getContext('2d');canvas.width = 100;canvas.height = 100;var img = new Image();img.onload = function () {ctx.drawImage(this,0,0,100,100);var base64 = canvas.toDataURL('image/jpg', 1);console.log(base64)};//设置图片跨域访问img.crossOrigin = 'anonymous';//加时间戳解决跨域问题img.src = url+"?timeStamp="+new Date();  <= 解决问题的关键点document.body.appendChild(img);}
</script>
</html>

以上纯属个人见解,如果有什么不对的地方,请大家指出,诚虚心受教!

跨域图片使用toDataURL遇坑记。(最终还是解决了)相关推荐

  1. canvas跨域图片报Tainted canvases may not be exported.

    canvas跨域图片报Tainted canvases may not be exported.解决办法--在路径后面添加时间戳 img.src = url + "?v=" + n ...

  2. Canvas引入跨域的图片导致toDataURL()报错的问题的解决

    本文介绍了Canvas引入跨域的图片导致toDataURL()报错的问题的解决,分享给大家,具体如下: [场景] 用户打开网页,则请求腾讯COS(图片服务器)上的图片js代码.使用canvas绘图. ...

  3. h5跨域访问图片_网页保存为图片及高清截图的优化 | canvas跨域图片配置

    本次技术调研来源于H5项目中的一个重要功能需求:实现微信长按网页保存为截图. 这里有个栗子(请用微信打开,长按图片即可保存):3分钟探索你的知识边界 将整个网页保存为图片是一个十分有趣的功能,常见于H ...

  4. 网页保存为图片及高清截图的优化 | canvas跨域图片配置

    本次技术调研来源于H5项目中的一个重要功能需求:实现微信长按网页保存为截图. 这里有个栗子(请用微信打开,长按图片即可保存):3分钟探索你的知识边界 将整个网页保存为图片是一个十分有趣的功能,常见于H ...

  5. svg转成jpg/png图片跨域图片

    svg转成jpg/png图片,svg含跨域图片 基本思路: svg: svg效果: 转成jpg/png: base64串显示效果 由于svg上含有跨域图片,图片没显示出来,所以最终处理结果: 解决跨域 ...

  6. vue 跨域图片下载

    在项目中遇到一个问题,后端传回来的图片可以查看,但是下载时会提示跨域. 再搜索了多种办法下,发现要提前把图片转为base64,在进行下载,就可以成功了. 具体方法如下. // 下载图片insertIm ...

  7. canvas读取跨域图片像素失败 Failed to execute getImageData The canvas has been tainted by cross-origin data

    错误描述: Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The ca ...

  8. php解决跨域问题6,关于php:tp6-通过全局中间件-解决跨域问题

    tp6官网有提供跨域决绝办法,当我间接应用无奈用.(可能我用的姿态不对). 定义中间件 declare (strict_types = 1); namespace app\middleware; us ...

  9. 什么是跨域?浏览器为何禁止跨越请求?如何解决浏览器跨越问题

    1.什么是跨域? 跨越是产生于浏览器的"同源策略",所谓同源策略是指: 1)协议:http.https 2)域名:www.baidu.com.uland.taobao.com - ...

最新文章

  1. 如果常数项没有经过显著性检验_Cg,Cgk 能代替偏倚显著性检验?
  2. 如果我的实验室也这样布置,那多好。
  3. 晶振,数字电路的心脏~
  4. ASIHTTPRequest详解 [经典3]
  5. C# 图片加水印例程
  6. 初学Java编程经常遇到的问题,你们遇到过吗?
  7. 每天一个实用小技巧!归纳多个文件、批量修改文件名
  8. Kafka2.12安装与配置/生产与消费
  9. core控制器属性注入的用处_asp.net-core – 如何使用Autofac和ASP.NET Core在控制器上启用属性注入?...
  10. 中国晶圆和集成电路(IC)行业市场供需与战略研究报告
  11. 【转】编辑器与IDE
  12. 数据--第27课 - 初始斗转
  13. SI4463模块技术研究(结束)
  14. 重庆2021年高考二诊成绩查询,2021年重庆二诊,2021年4月重庆二诊考试,重庆二诊康德卷...
  15. 提高个人竞争力的三件法宝
  16. Wei框架源码解读(1)
  17. php上传文件失败解决方案
  18. 奇迹网站系统IGC奇迹mu S18网站可视化装备模板
  19. Android Studio的res自动生成的文件出错了_莫韵乐与bug的奇妙冒险
  20. 飞链云数字艺术品-如何生成邀请海报

热门文章

  1. 2011年6月安徽省计算机水平(二级c语言试题)及解析答案,2011年计算机等级二级C语言填空题练习题及答案解析(2)...
  2. 北林计算机分数,2021北京林业大学录取分数线-北京林业大学分数线-2021北京林业大学录取查询网址...
  3. 宽睿OES——最懂量化交易者的极速交易通道
  4. greenplum客户端工具_首发全新Greenplum数据库图形化客户端
  5. Ellisys Bluetooth Sniffer 文档 (EEN-BT08) - 将小麦与麦壳分开
  6. [4G5G专题-3]:RRU 数字预失真DPD详解
  7. tensorflow中summary操作
  8. (附源码)springboot教师排课课系统 毕业设计 310858
  9. bzoj1030 [JSOI2007] 文本生成器(ACAM+dp)
  10. 微信小程序 关闭当前页面