博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在HTML5 Canvas中放入图片和保存为图片的方法
阅读量:6616 次
发布时间:2019-06-25

本文共 2140 字,大约阅读时间需要 7 分钟。

  hot3.png

第一种方式

如果是使用的图片的话,就会涉及到canvas的图片跨域问题,因为canvas是禁止跨域的,如果图像来自其他域,调用toDataURL()会抛出一个错误

错误代码

需要添加“img.crossOrigin = "anonymous"或者“*”,这个方式还需进一步测试

需求: 将HTML5的内容保存为图片思路: 通过Canvas绘图生成base64图片,长按即可保存到本地问题: canvas禁止跨域、安卓微信长按不能保存base64图片、服务器拉取的图片被压缩

如果使用canvas画出来的可以实现下载保存

HTML

 JS

//绘制图片var canvas = document.getElementById('canvas1');var ctx = canvas.getContext('2d');ctx.fillRect(0, 0, canvas.width, canvas.height);ctx.fillStyle = "red";ctx.font = 'italic bold 30px Helvetica ';ctx.fillText('楷体', 50, 50);//绑定下载事件var btn = document.getElementById('btn1');btn.onclick = function () {  var type = 'png';  download(type);}document.getElementById('btn2').onclick = function () {  var type = 'jpg';  download(type);}//图片下载操作,指定图片类型function download(type) {  //设置保存图片的类型  var imgdata = canvas.toDataURL(type);  //将mime-type改为image/octet-stream,强制让浏览器下载  var fixtype = function (type) {    type = type.toLocaleLowerCase().replace(/jpg/i, 'jpeg');    var r = type.match(/png|jpeg|bmp|gif/)[0];    return 'image/' + r;  }  imgdata = imgdata.replace(fixtype(type), 'image/octet-stream')  //将图片保存到本地  var saveFile = function (data, filename) {    var link = document.createElement('a');    link.href = data;    link.download = filename;    var event = document.createEvent('MouseEvents');    event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);    link.dispatchEvent(event);  }  var filename = new Date().toLocaleDateString() + '.' + type;  saveFile(imgdata, filename);}

可以实现选择一种图片格式进行下载

--------------------------------------------------

var img = new Image;  img.onload = function () {    var cas = document.getElementById('c1');    var ctx = cas.getContext('2d');    cas.width = img.width, cas.height = img.height;    ctx.drawImage(img, 0, 0, img.width, img.height);    console.log(cas.toDataURL());  };  img.crossOrigin = "anonymous"; //关键  img.src = "http://cn.vuejs.org/images/lifecycle.png";

 第二种方式

使用 a 链接,添加 download 属性,实现点击下载,但都是直接下载到浏览器的默认路径,无法实现自己手动选择路径保存

点击下载 document.getElementsByTagName('a')[0].onclick = function (e) {   e.target.download = "12456.png"}

 

转载于:https://my.oschina.net/mdu/blog/901908

你可能感兴趣的文章
LeetCode OJ:Merge Two Sorted Lists(合并两个链表)
查看>>
功能测试
查看>>
【BZOJ 1901】Dynamic Rankings
查看>>
Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock
查看>>
React-Native 之 GD (十六)首页筛选功能
查看>>
SSISDB5:使用TSQL脚本执行Package
查看>>
asp.net后台进程做定时任务
查看>>
给vs2012换肤
查看>>
java接口中多继承的问题
查看>>
索引笔记《二》确定需要建立索引的列
查看>>
libjpeg的问题
查看>>
Ubuntu+Apache+PHP+Mysql环境搭建(完整版)
查看>>
深度学习笔记之CNN(卷积神经网络)基础
查看>>
嵌入式 详解udev
查看>>
云安全:这也是需要花大钱去建设的部分
查看>>
5G网络不止能1秒下一部电影,它还能够…
查看>>
中国电信集采终端6700万部 金额达1070亿元
查看>>
2016年的十个数据中心故事
查看>>
《Java并发编程的艺术》一一3.3 顺序一致性
查看>>
《设计之外——比修图更重要的111件事》—第1部分3 虚心学习
查看>>