将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截取字符串实例代码【推荐】
Jun 07 HTML / CSS
浅谈css3中的渐进增强和优雅降级
Dec 01 HTML / CSS
CSS3中新增的对文本和字体的设置
Feb 03 HTML / CSS
css3中仿放大镜效果的几种方式原理解析
Dec 03 HTML / CSS
HTML5 Geolocation API的正确使用方法
Dec 04 HTML / CSS
HTML5计时器小例子
Oct 15 HTML / CSS
编写html5时调试发现脚本php等网页js、css等失效
Dec 31 HTML / CSS
html5使用canvas画空心圆与实心圆
Dec 15 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
Apr 24 HTML / CSS
html5简介及新增功能介绍
May 18 HTML / CSS
h5移动端调用支付宝、微信支付的实现
Jun 08 HTML / CSS
详解CSS不定宽溢出文本适配滚动
May 24 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
一个超简单的jQuery回调函数例子(分享)
2016/08/08 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
详解Python的循环结构知识点
2019/05/20 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
python实现xml转json文件的示例代码
2020/12/30 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
求职推荐信
2013/10/28 职场文书
我爱我校演讲稿
2014/05/21 职场文书
学校2014年度工作总结
2014/12/06 职场文书
求职推荐信范文
2015/03/27 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
字节飞书面试promise.all实现示例
2022/06/16 Javascript
MySQL主从切换的超详细步骤
2022/06/28 MySQL