一个canvas的demo
该demo放于tomcat下运行,否则出现跨域错误
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
<div style="text-align: center;">
<canvas id="myCanvas" width="" height="" style="border: 1px solid #fff123"></canvas>
<div>
<button id="btn" onclick="download()">点我下载</button>
</div>
</div>
<script type="text/javascript">
let cans=document.getElementById("myCanvas");
let ctx=cans.getContext("2d");
let img =new Image();
img.src="2.jpg";
img.setAttribute("crossOrigin",'Anonymous');
img.onload = function(){
//以Canvas画布上的坐标(10,10)为起始点,绘制图像
ctx.drawImage(img, , );
ctx.drawImage(img,,,,);
ctx.strokeStyle = "#0695FF"; //定义矩形的颜色
ctx.strokeRect(,,,); ctx.strokeRect(,,,);
}; function imgType(ty) {
let type = ty.toLowerCase().replace(/jpg/i, 'jpeg');
var r = type.match(/png|jpeg|bmp|gif/)[];
return 'image/' + r;
} function download() { let type = 'png'; //设置下载图片的格式 let img_png_src = cans.toDataURL("image/png"); //将canvas保存为图片 let imgData = img_png_src.replace(imgType(type),'image/octet-stream'); let filename = '图片' + '.' + type; //下载图片的文件名 saveFile(imgData,filename);
} let saveFile = function(data, fileName){
let save_link = document.createElement('a');
save_link.href = data;
save_link.download = fileName; let event = document.createEvent('MouseEvents');
event.initEvent("click", true, false);
save_link.dispatchEvent(event);
};
</script>
</body>
</html
一个canvas的demo的更多相关文章
- 我的第一个 react redux demo
最近学习react redux,先前看过了几本书和一些博客之类的,感觉还不错,比如<深入浅出react和redux>,<React全栈++Redux+Flux+webpack+Bab ...
- 1.类的加载机制_继承类的加载(一个小的Demo)说明
今天我们先来一个小的Demo来了解类的加载顺序. public class ClassLoaderTest { public static void main(String[] args) { Sys ...
- 第一个ajax小demo
第一个ajax小demo 文章来源:http://blog.csdn.net/magi1201/article/details/44569657
- 手把手教你使用 js 实现一个 Canvas 编辑器
手把手教你使用 js 实现一个 Canvas 编辑器 拖拽 缩放,等比缩放 导出 image 模版 撤销,重做 OOP,封装,继承,多态 发布库 CI/CD (gitlab/github) ... h ...
- canvas写的一个小时钟demo
<!DOCTYPE html> <html> <head> <title>HTML5 Canvas Demo of clock</title> ...
- 移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)
背景: 本人的一个移动端H5项目,需求如下: 需求一:手机相册选取或拍摄照片后在页面上预览 需求二:然后绘制在canvas画布上 这里,我们先看一个demo(http://jsfiddle.net/q ...
- 无废话WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- 一起来花5分钟写一个PHP入门Demo
最近公司招了几个应届毕业生,他们对前端的了解还挺多,但是对后端的技术一无所知,我觉得,作为一个前端攻城狮,如果你有远大的抱负,就应该雨露均沾... 今天我就跟大家讲一讲PHP最基本的入门,至少别人问起 ...
- 使用angular.js开发的一个简易todo demo
前沿 在CVTE实习考察的一周里,接触到了angular,并在最后的一天任务里要求使用angular做一个功能主要包括创建.编辑.恢复.删除以及留言的todo demo,并支持响应式布局.因为之前没怎 ...
随机推荐
- new int
new int, 在申请内存,定义int变量:new int (100),在申请内存,定义int变量,并初始化为100:new int[100] , 在申请内存,定义int数组变量.
- c# 读取txt方法
string strLine; try { FileStream aFile = new FileStream("Log.txt", FileMode.Open); StreamR ...
- English Voice of <<Beautiful now>>
Beautiful Now -Zedd & Jon Bellion I see what you're wearing, there's nothing beneath it 我看见了你身着 ...
- WCF开发框架形成之旅--个人图片信息的上传保存
WCF开发框架形成之旅--个人图片信息的上传保存 http://www.cnblogs.com/wuhuacong/archive/2011/12/23/2299614.html 一般在业务系统里面, ...
- EntityFramework的安装
关于EntityFramework在vs2012无法引用的问题 这段时间学习MVC,发现一个问题,我公司的电脑可以直接引用EntityFrameWork这个命名空间,但我家里面的电脑就不能直接引用,刚 ...
- 20180831xlVBA_WorksheetsCosolidate
Sub WorkSheetsConsolidate() Rem 设置求和区域为 单元格区域;单元格区域 Const Setting As String = "A1;B2:C4" D ...
- Spring Batch 介绍
在企业应用的关键环境中,通常有需要很多应用来来处理大量的应用.这商业操作包括了自动化,并且负责的处理程序来对大量数据进行高效的处理,通常这些程序不需要人工进行干预.这些事件包括有基于时间周期产生的操作 ...
- apiCloud 上拉加载
api.addEventListener({ name:'scrolltobottom', extra:{threshold:} }, function(ret, err){ //上拉加载时需要加载的 ...
- 路由器固定IP配置
前言 路由器插入好电源,插入好网线,笔记本连接路由器的wifi,连接成功后,网页自动打开. 1.在网页自动输入管理员密码 2.上网方式选择固定IP地址,输入IP地址,子网掩码,默认网关,DNS服务 3 ...
- 漏洞复现——apache文件解析漏洞
漏洞描述: 我们可以上传一个文件名末尾包含换行符的文件,以此绕过它的黑名单 影响版本: apache 2.4.0-2.4.29 漏洞分析: <FilesMath "\.(?i:php| ...