将HTML5 Canvas的内容保存为图片借助toDataURL实现


Posted in HTML / CSS onMay 20, 2013

主要思想是借助Canvas自己的API - toDataURL()来实现,整个实现
HTML + JavaScript的代码很简单。

复制代码
代码如下:

<html>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<head>
<script>
window.onload = function() {
draw();
var saveButton = document.getElementById("saveImageBtn");
bindButtonEvent(saveButton, "click", saveImageInfo);
var dlButton = document.getElementById("downloadImageBtn");
bindButtonEvent(dlButton, "click", saveAsLocalImage);
};
function draw(){
var canvas = document.getElementById("thecanvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "rgba(125, 46, 138, 0.5)";
ctx.fillRect(25,25,100,100);
ctx.fillStyle = "rgba( 0, 146, 38, 0.5)";
ctx.fillRect(58, 74, 125, 100);
ctx.fillStyle = "rgba( 0, 0, 0, 1)"; // black color
ctx.fillText("Gloomyfish - Demo", 50, 50);
}
function bindButtonEvent(element, type, handler)
{
if(element.addEventListener) {
element.addEventListener(type, handler, false);
} else {
element.attachEvent('on'+type, handler);
}
}
function saveImageInfo ()
{
var mycanvas = document.getElementById("thecanvas");
var image = mycanvas.toDataURL("image/png");
var w=window.open('about:blank','image from canvas');
w.document.write("<img src='"+image+"' alt='from canvas'/>");
}
function saveAsLocalImage () {
var myCanvas = document.getElementById("thecanvas");
// here is the most important part because if you dont replace you will get a DOM 18 exception.
// var image = myCanvas.toDataURL("image/png").replace("image/png", "image/octet-stream;Content-Disposition: attachment;filename=foobar.png");
var image = myCanvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
window.location.href=image; // it will save locally
}
</script>
</head>
<body bgcolor="#E6E6FA">
<div>
<canvas width=200 height=200 id="thecanvas"></canvas>
<button id="saveImageBtn">Save Image</button>
<button id="downloadImageBtn">Download Image</button>
</div>
</body>
</html>

运行效果如下
将HTML5 Canvas的内容保存为图片借助toDataURL实现
HTML / CSS 相关文章推荐
纯css3实现效果超级炫的checkbox复选框和radio单选框
Sep 01 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
Oct 19 HTML / CSS
用CSS3的box-reflect来制作倒影效果
Nov 15 HTML / CSS
详解H5本地储存Web Storage
Jul 03 HTML / CSS
传统HTML页面实现模块化加载的方法
Oct 15 HTML / CSS
HTML5 Web Workers之网站也能多线程的实现
Apr 24 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
Sep 08 HTML / CSS
移动端html5 meta标签的神奇功效
Jan 06 HTML / CSS
HTML5头部标签的一些常用信息小结
Oct 23 HTML / CSS
html5简单示例_动力节点Java学院整理
Jul 07 HTML / CSS
HTML5仿微信聊天界面、微信朋友圈实例代码
Jan 29 HTML / CSS
仿酷狗html5手机音乐播放器主要部分代码
May 15 #HTML / CSS
基于HTML5 Canvas:字符串,路径,背景,图片的详解
May 09 #HTML / CSS
使用HTML5做个画图板的方法介绍
May 03 #HTML / CSS
基于第一个PhoneGap(cordova)的应用详解
May 03 #HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
Apr 25 #HTML / CSS
HTML5 本地存储之如果没有数据库究竟会怎样
Apr 25 #HTML / CSS
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
Apr 25 #HTML / CSS
You might like
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
2013/10/22 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
Python画图学习入门教程
2016/07/01 Python
python的Tqdm模块的使用
2018/01/10 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
婚礼新郎父母答谢词
2014/01/16 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
红白喜事主持词
2015/07/06 职场文书
九年级英语教学反思
2016/02/15 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python