前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前段图片跨域问题,导致canvastoDataURL错误

前段图片跨域问题,导致canvastoDataURL错误

作者头像
93年的老男孩
发布于 2019-12-20 06:48:53
发布于 2019-12-20 06:48:53
3.1K0
举报

因为图片资源放到OSS上,一般情况下img的src是不存在这个问题的,但是因为需要图片合成,需要拿到图片资源后进行处理,比如前段canvas图片合成,避免不了会出现跨域情况。

合成代码如下:

var img = document.createElement_x('img');

img.src = res.img_url;

img.onload = function(){

var code = document.createElement_x('img');

code.src = res.code_url;

code.onload = function(){

var canvas = document.createElement_x('canvas');

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

canvas.width = 750;

canvas.height = 1334;

context.drawImage(img,0,0,img.width,img.height,0,0,750,1334);

context.drawImage(code,0,0,code.width,code.height,554,1068,180,180);

context.font="bolder 20px 黑体";

context.textAlign="center";

context.fillText("name",644,1268);

url = canvas.toDataURL();

t.shareUrl = url;

}

}

此时出现错误 

Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.  at HTMLImageElement.code.onload

因为域名不在同一域名下,导致资源获取失败。

解决方案一

img对象添加 crossOrigin = '*';使用CORS 请求,可以实现跨域访问资源

var img = document.createElement_x('img');

img.src = res.img_url;

img.crossOrigin = 'anonymous';

img.onload = function(){

var code = document.createElement_x('img');

code.src = res.code_url;

code.crossOrigin = 'anonymous';

code.onload = function(){

var canvas = document.createElement_x('canvas');

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

canvas.width = 750;

canvas.height = 1334;

context.drawImage(img,0,0,img.width,img.height,0,0,750,1334);

context.drawImage(code,0,0,code.width,code.height,554,1068,180,180);

context.font="bolder 20px 黑体";

context.textAlign="center";

context.fillText("name",644,1268);

url = canvas.toDataURL();

t.shareUrl = url;

}

}

代码执行出现如下错误:

Access to image at '' from origin '' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

此时需要后端解决,让后端人员添加header头 Access-Control-Allow-Origin 与 Access-Control-Allow-Methods 允许跨域访问资源。

以上代码可以解决大部分问题,但是,有些手机,比如某果或者部分浏览器不支持crossOrigin ,此时需要方案二

方案二如下

axios.get(res.static_customize_poster,{

responseType: 'blob'

}).then(function(data){

var img = document.createElement_x('img');

img.src = URL.createObjectURL(data.data);

img.onload = function(){

var code = document.createElement_x('img');

code.src = res.code;

code.crossOrigin = 'anonymous';

code.onload = function(){

var canvas = document.createElement_x('canvas');

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

canvas.width = 750;

canvas.height = 1334;

context.drawImage(img,0,0,img.width,img.height,0,0,750,1334);

context.drawImage(code,0,0,code.width,code.height,554,1068,180,180);

context.font="bolder 20px 黑体";

context.textAlign="center";

context.fillText("name",644,1268);

url = canvas.toDataURL();

t.shareUrl = url;

}

}

});

先异步请求图片资源,设置响应类型为responseType为blob,使用URL.createObjectURL将blob转换为可用blob:url

然后执行正常程序即可

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/12/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
html5中如何解决canvas图片跨域问题-canvas无法导入远程图片
今天我们来说说在开发中比较常谈及的问题,那就是跨域问题,我们就来说说在:“html5中如何解决canvas图片getImageData,toDataURL跨域问题?”这个问题吧!
超级小可爱
2023/11/08
2.9K0
html5中如何解决canvas图片跨域问题-canvas无法导入远程图片
前端H5生成海报
最近项目需要涉及到前端海报合成分享功能,前端靠不上只能自己上... 现学现卖 相关链接
北溟有鱼QAQ
2022/09/16
5480
前端给页面添加暗水印的办法
上一篇文章讲到了在页面上添加明水印的方法,但是明水印比较好清除,而且对于一些没做处理的图片,当用户直接保存的时候,是没有水印的,这时候信息泄露问题依然存在。为了解决这样的问题,我们需要用到暗水印。
伯约同学
2022/02/13
1.7K0
黑产代码解密--利用canvas加载代码
前段时间获取到黑产的一些代码,不得不感叹黑产的代码实在在写的是好得很,思路巧妙,环环相扣。不得不说,技术不好,黑产都做不了了。虽然分析了好多天,但是也只是一知半解。这里抽出一小部分来讲一下。二话不说,先上代码:
madneal
2019/11/26
1K2
谈谈水印实现的几种方式
日常工作中,经常会遇到很多敏感的数据,为防止数据的泄露,我们要在数据上做一些”包装“。目的就是让那些有心泄露数据的”不法分子“迫于严重的”舆论压力“而放弃不法行为,使之”犯罪未遂“,达到不战而屈人之兵的效果。而在安全部门工作的我们,数据安全的观念早已深入骨髓,每个文字,每张图片,都要留心是否有泄露的风险,怎么防止数据泄露,是我们一直思考的问题。比如图片的水印,就是我们工作过程中经常涉及到的问题。因为本身工作内容就是审核平台的开发,经常有一些风险图片会在审核平台出现,考虑到审核人员的安全意识参差不齐,所以为防止不安全的事情发生,图片增加水印的工作是必须要做的。
@超人
2021/10/12
1.1K0
利用canvas给图片加水印 (转)
如果仅仅是普通的合成,例如一个底图和一个PNG水印图片合成,直接使用canvas的drawImage()方法即可,语法如下:
javascript.shop
2019/09/04
4.8K0
利用canvas给图片加水印 (转)
让Web页面中的编辑器支持黏贴或直接拖拽来添加图片「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/107088.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/04
6060
复制粘贴那些事
这篇公众号文章是用typora上写的,这是一款大名鼎鼎的客户端markdown编辑器。
一粒小麦
2019/08/20
2.5K0
复制粘贴那些事
ol5里面实现相册地图
如下图,在手机里面有一个这样的功能,我称之为“相册地图”,本文讲述的是通过扩展ol.style的类,来实现“相册地图”这个功能。
牛老师讲GIS
2019/04/09
7490
ol5里面实现相册地图
jszip demo
安装包 jszip和file-saver 代码 <template> <div class="jszip"> <span @click="demoZip">downloadZip</span> </div> </template> <script> import JSZip from 'jszip' import { saveAs } from 'file-saver' export default { name: "jszip", data
李维亮
2022/04/07
1.8K0
Js图片转base64,base64转file上传服务器
function imgToBase64(url, callback) { let canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), img = new Image img.crossOrigin = 'Anonymous' img.src = url img.onload = () => { canvas.height = img
明知山
2022/05/05
6.3K0
使用 html2canvas 生成分享图片,CDN图片不展示问题
生成分享图片,包含后端返回的图文,图片是 cdn 资源。开始尝试使用 html2canvas 时,使用的是本地图片,生成截图无问题。
用户10106350
2022/10/28
2.1K0
图片转换成html代码_java html转图片
1.页面上的图片,转换成base64格式,可以通过canvas 的 toDataURL
全栈程序员站长
2022/09/20
7.6K0
js -- canvas img 封装
鼠标 1.操作canvas 中的 img。 右键放大缩小,左键移动img。    2.拖动input type= range 改变图片的透明度 html 代码 <!DOCTYPE html> <html lang="en" oncontextmenu="doNothing()"> <head> <meta charset="UTF-8"> <title>图片已中心店的坐标缩放</title> <style> #box1 { width
小蔚
2019/09/11
6.8K0
js实现图片资源转化成base64的各种场景
网络上有很多片介绍通过js将图片转换成base64的文章,之所以再写这篇文章的原因时发现没有找到系统的介绍的文章,有的介绍如何实现本地项目的图片转码,有的介绍如何实现网络资源的图片转化,但是系统介绍的少之又少,所以我就在这里将各种场景系统的介绍一下:
yaphetsfang
2020/07/30
1.9K0
get两个js小技能——JS截取视频第一帧&图片转Base64
背景 由于开发之前做的VisualDrag拖拽模板优化的时候,拖拽进去的图片、视频文件等需要进行截图作为封面,目前采用的截图方法是htme2canvas,使用canvas进行的截图操作,所以就会遇到这样的问题,视频和图片图床简单的使用标签加入canvas画布里面无法正确的截图成功。最后采取的措施就是将图片转为base64画入canvas,将视频截取第一帧图片,然后画进canvas,最后进行截图,最后经过折腾,这个方法好像成功了,写这篇博客进行记录下。 JS截取视频第一帧 截取视频的第一帧作为视频的封面
不愿意做鱼的小鲸鱼
2023/03/23
7K0
get两个js小技能——JS截取视频第一帧&图片转Base64
JS批量打包下载图片(笔记)
<img src="http://img.zcool.cn/community/01c92f56597f686ac7251c94e76e51.jpg" /> <img src="http://img.zcool.cn/community/01888f5922bad7b5b3086ed4cc3711.jpg" /> <button onclick="packageImages()">packageImages</button><span id="status"></span> <script src="
小语雀网
2022/05/06
2.7K0
手把手教你实现一个图片压缩工具(Vue与Node的完美配合)
图片压缩对于我们日常生活来讲,是非常实用的一项功能。有时我们会在在线图片压缩网站上进行压缩,有时会在电脑下软件进行压缩。那么我们能不能用前端的知识来自己实现一个图片压缩工具呢?答案是有的。
Vam的金豆之路
2021/12/01
8130
手把手教你实现一个图片压缩工具(Vue与Node的完美配合)
HTML5中Canvas元素的使用总结 原
    Canvas提供了开发者自定义绘图的接口,我们可以公国getContext()函数来获取绘图上下文进行绘制操作,这个函数中可以传入两个参数,其中第1个参数设置绘图上下文的类型,比较常用的是"2d",我们也可以使用"webgl"来使用webOpenGL实现3D绘制。本篇博客主要总结2d绘制的相关方法。
珲少
2018/08/15
2K0
HTML5中Canvas元素的使用总结
                                                                            原
uniapp H5 画布自定义海报实现长按识别,分享,转发
前端使用uniapp制作H5自定义海报,本来以为挺简单的一常用功能画布,因为之前也在 H5 和小程序做过类似功能,所以直接上手干了,没想到还是遇到了一些坑,特此记录希望能够帮到大家。
IT工作者
2022/05/16
3.9K0
相关推荐
html5中如何解决canvas图片跨域问题-canvas无法导入远程图片
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档