一个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,并支持响应式布局.因为之前没怎 ...
随机推荐
- 【java】Comparator的用法
文章转载自: http://blog.csdn.net/u012250875/article/details/55126531 1.为什么写? comparator 是javase中的接口,位于jav ...
- centos/redhat 删除虚拟网桥virbr0
kvm虚拟化环境安装好后,ifconfig会发现多了一个虚拟网卡virbr0. 这是由于安装和启用了libvirt服务后生成的,libvirt在服务器(host)上生成一个 virtual netw ...
- 牛客网NOIP赛前集训营-提高组(第七场)C 洞穴
洞穴 思路: 矩阵乘法 由于只需要知道 A ^ l 的 第a行第b个元素 所以我们每次在做矩阵乘法时只需要算第a行就可以了 还要像矩阵快速幂一样预处理A ^ (1<<d) 代码: #pra ...
- 到达一个数 Reach a Number
2018-09-24 14:19:58 问题描述: 问题求解: 初看到这个问题,直觉上认为可以通过BFS遍历解空间进行求解,因为本质上来说,这个问题和棋盘上移动马的问题是一类问题,都是可以转化成图的问 ...
- Go语言学习之2 包、函数、常量、数据类型、字符操作
第一部分:基本数据类型和操作符 1. 文件名&关键字&标识符 (1)所有go源码以.go结尾 (2)标识符以字母或下划线开头,大小写敏感,比如: a. boy b. Bo ...
- 如何获取select选中的值
一:JavaScript原生的方法 1:拿到select对象: var myselect=document.getElementById(“test”); 2.拿到选中项的索引: var index= ...
- 《SQL 基础教程》—第一章:数据库与 SQL
导言 这一章的内容如下: 数据库简介 SQL 概要 表的创建 表的删除与更新 数据库简介 定义: Database, 是大量数据的集合Database Management System,是用于管理数 ...
- java.lang.RuntimeException: Unable to start activity ComponentInfo……AppCompat does not support the current theme features
Android测试时出现闪退的问题,出现了如下所示异常: java.lang.RuntimeException: Unable to start activity ComponentInfo{thon ...
- 20181014xlVBA获取小题零分名单
Sub GetZeroName() Dim Dic As Object Const SUBJECT = "科目名称" Dim Key As String Dim OneKey Di ...
- 20171113xlVba指定文件夹多簿多表分表合并150
'2017年11月13日 'Next_Seven '功能:文件夹对话框指定文件夹下,合并(复制粘贴)每个Excel文件内的指定子表内容, '在名为"设置"的工作表A列 输入汇总子表 ...