将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的flexbox实现水平垂直居中与三列等高布局
Sep 12 HTML / CSS
使用CSS3来绘制一个月食图案
Jul 18 HTML / CSS
CSS3实现酷炫的3D旋转透视效果
Nov 21 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
Sep 26 HTML / CSS
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
Mar 25 HTML / CSS
使用html5 canvas创建太空游戏的示例
May 08 HTML / CSS
基于html5 DeviceOrientation 实现微信摇一摇功能
Sep 25 HTML / CSS
HTML5实现页面切换激活的PageVisibility API使用初探
May 13 HTML / CSS
h5使用canvas画布实现手势解锁
Jan 04 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
Apr 29 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
May 05 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
Sep 16 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
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
php 函数使用方法与函数定义方法
2010/05/09 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
PHP中比较时间大小实例
2014/08/21 PHP
PHP实现递归的三种方法
2020/07/04 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
python实现封装得到virustotal扫描结果
2014/10/05 Python
一步步解析Python斗牛游戏的概率
2016/02/12 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
Python 函数基础知识汇总
2018/03/09 Python
通过实例学习Python Excel操作
2020/01/06 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
远程教育学习心得体会
2016/01/23 职场文书
Nginx配置使用详解
2022/07/07 Servers