您现在的位置是:网站首页> 编程资料编程资料
解锁canvas导出图片跨域的N种姿势小结h5使用canvas画布实现手势解锁html5 canvas手势解锁源码分享
2021-08-31
1352人已围观
简介 这篇文章主要介绍了解锁canvas导出图片跨域的N种姿势小结的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文介绍了解锁canvas导出图片跨域的N种姿势小结,分享给大家,具体如下:
Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
上面这个错误相信大家用canvas执行 toDataUrl导出图片的时候都遇到过,图片服务器域名和当前不一样,因为安全策略不允许跨域导出图片
解决这个跨越问题方式有多种
一 、将图片转换成base64
图片变成base64就没有域名一说了,自然不存在跨域
注意:图片转换成base64加增加图片文件大小,如果图片比较大,不建议转换base64,否则会增加网页加载时间,影响网站速度,这种方式一般适用于小图
二、 图片服务器设置允许跨域
即请求图片返回的响应头中带有Access-Control-Allow-Origin切值为 *(允许所有网站跨域请求)或者当前网站域名(只允许固定域名下跨域请求), 然后前端在加载图片是设置图片跨域属性img.crossOrigin="anonymous"。具体代码如下
var canvas = document.getElementById('myCanvas') var ctx = canvas.getContext('2d') var img = document.createElement('img') img.crossOrigin="anonymous" img.src = 'https://p4-q.mafengwo.net/s12/M00/CA/3B/wKgED1w8fL6ADk16AAXyDaz2bdU61.jpeg' img.onload = function() { ctx.drawImage(img,0,0,500,300); console.log(canvas.toDataURL()) } 这样前后结合跨域问题便迎刃而解
三、把图片放到当前域名下
原谅我不厚道的笑了,这的确是一种可以解决问题。
BUT 实际项目中图片一般都存储在cdn上,所以这种方式不太现实🌚🌝🌞
图片变成base64就没有域名一说了,自然不存在跨域
四、当图片服务没法设置跨域响应头时
确实有这种情况,比如获取第三方网站的头像,比如微信头像,然后前端动态生成新的图片,微信头像图片不允许跨域导出,怎么办??? 上面的几种方式都不好使
这种情况需要后端协助了,后端做一层转发,服务端获取头像,转换成base64返回前端,或者存储到本地允许跨域的服务器上,生产一个新的图片链接,返回给前端,这个时候结合方法一或者方法二,跨域问题也自然解决
如果你用的htmlToCanvas插件导出图片的话,则需要添加useCORS: true配置项,原理跟方法二一样,当然前置条件是图片域名允许跨域
至此我所知道的N中方式介绍完毕了,欢迎补充
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- 详解canvas绘制多张图的排列顺序问题html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- canvas绘制圆角头像的实现方法HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行详解html2canvas截图不能截取圆角图片的解决方案使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例HTML5 Canvas自定义圆角矩形与虚线示例代码html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
- HTML5如何使用SVG的方法示例Html5之svg可缩放矢量图形_动力节点Java学院整理使用HTML5进行SVG矢量图形绘制的入门教程HTML5新特性之用SVG绘制微信logo 深入浅析HTML5中的SVG深入解析HTML5使用SVG图像时的viewBox属性用法html5+svg学习指南之SVG基础知识html5中svg canvas和图片之间相互转化思路代码
- Canvas 像素处理之改变透明度的实现代码html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- 详解Canvas实用库Fabric.js使用手册html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- Html5原创俄罗斯方块(基于canvas)html5实现简单的俄罗斯方块动画效果游戏源码html5实现的3D立体俄罗斯方块游戏源码基于HTML5/CSS3实现的简易版俄罗斯方块游戏源码HTML5+JS实现俄罗斯方块原理及具体步骤Html5写一个简单的俄罗斯方块小游戏
- h5使用canvas画布实现手势解锁解锁canvas导出图片跨域的N种姿势小结html5 canvas手势解锁源码分享
- canvas中普通动效与粒子动效的实现代码示例详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
- 详解webapp页面滚动卡顿的解决办法html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
