html5 canvas手写画板 下载图片至本地

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>canves</title></head><body><div><canvas id="canvas" width="600" height="400"></canvas> </div><label>画笔宽度:</label><select id="sel">   <option value="4">4</option><option value="8">8</option><option value="16">16</option><option value="30">30</option></select>画笔颜色:<input type="color" name="color1" id="color1"/><br /><br /><br /><br /><input type="button" value="生成图片" onclick="generate_picture()"><input type="button" value="下载图片" onclick="download_picture()"><br><img id="image" src="" width="500px" height="200px"></body><script  type="text/javascript">var canvas=document.getElementById("canvas");var ctx=canvas.getContext("2d");//画一个黑色矩形ctx.fillStyle="#002200";//绘制填充颜色ctx.fillRect(0,0,600,400);//绘制一个被填充的矩形//按下标记var onoff=false;//定义起始位置var oldx=-10;var oldy=-10;//设置画笔颜色默认为白色var linecolor="white";//画笔宽度默认为4var linw=4;changeColor();//鼠标移动事件,事件绑定canvas.addEventListener("mousemove",draw);canvas.addEventListener("mousedown",down);canvas.addEventListener("mouseup",up);// 下笔时按下标记打开,给oldx、oldy赋值function down(event){console.log(event);onoff=true;oldx=event.pageX-10;oldy=event.pageY-10;}//检测鼠标离开后,按下标记关闭    function up(){onoff=false;}//画图,按下标记打开function draw(event){if(onoff==true){var newx=event.pageX-10;var newy=event.pageY-10;// 起始一条路径,或重置当前路径。ctx.beginPath();// 把路径移动到画布中的指定点,不创建线条。ctx.moveTo(oldx,oldy);// 添加一个新点,然后在画布中创建从该点到最后指定点的线条。ctx.lineTo(newx,newy);// 设置或返回用于笔触的颜色、渐变或模式。ctx.strokeStyle=linecolor;// 设置或返回当前的线条宽度。ctx.lineWidth=linw;// 设置或返回线条的结束端点样式。ctx.lineCap="round";// 绘制已定义的路径。ctx.stroke();oldx = newx;oldy = newy;// console.log(oldx);// console.log(newx);// console.log(oldy);// console.log(newy);}}     //改变下拉画笔宽度// 页面结束加载之后触发。HTML 事件window.onload=function(){var huabi=document.getElementById("sel");huabi.onchange=function(){//在元素值被改变时运行的脚本。linw=huabi.value;};//linw=huabi;};// 改变画笔颜色function changeColor(){var color1 = document.getElementById("color1");color1.onchange=function(){//在元素值被改变时运行的脚本。linecolor = color1.value; // 获得颜色赋值给画笔};//linw=huabi;};// 生成图片function generate_picture(){const dataImg = new Image();// canvas生成图片dataImg.src = canvas.toDataURL('image/png');// document.getElementById("image").src=canvas.toDataURL("image/jpg");document.getElementById("image").src=dataImg.src;//window.open("demo.htm", "height=100px, width=400px");//alert(document.getElementById("image"));};// 下载图片function download_picture(){const dataImg = new Image();dataImg.src = canvas.toDataURL('image/png');document.querySelector('#image').appendChild(dataImg)const alink = document.createElement("a");alink.href = dataImg.src;alink.download = "testImg.jpg";alink.click();}
</script><style>/* cursor属性定义了鼠标指针放在一个元素边界范围内时所用的光标形状 */#canvas{cursor:crosshair;}</style>
</html>

菜鸟教程canvas介绍
https://www.runoob.com/html/html5-canvas.html
菜鸟教程canvas参考手册
https://www.runoob.com/tags/ref-canvas.html

(1)后台打印出的鼠标事件MouseEvent
鼠标事件,MouseEvent.pageX,鼠标指针相对于整个文档的X坐标;
这个属性将基于文档的边缘,考虑任何页面的水平方向上的滚动。举个例子,如果页面向右滚动 200px 并出现了滚动条,这部分在窗口之外,然后鼠标点击距离窗口左边 100px 的位置,pageX 所返回的值将是 300。
参考网址:https://developer.mozilla.org/zh-CN/docs/Web/API/MouseEvent

(2)canvas学习——toDataURL()方法#
toDataURL()是canvas对象的一种方法,用于将canvas对象转换为base64位编码;
toDataURL()方法的两个参数:toDataURL(type, encoderOptions)

  • type指定转换为base64编码后图片的格式,如:image/png、image/jpeg、image/webp等等,默认为image/png格式;
  • encoderOptions用于设置转换为base64编码后图片的质量,取值范围为0-1,超出取值范围用默认值0.92代替;

html5 canvas手写画板 下载图片至本地相关推荐

  1. flutter手写画板,保存存成图片并上传到后台服务器

    1.只是一个dome,供借鉴使用,待优化 图例: 2. 这个手写画板借鉴了很多的github上面的内容,基本就是用github上的内容拼凑出来的,随后我会把github上相关的链接写上去 3. 全部代 ...

  2. 手写画板实现并转化成图片

    手写画板实现并转化成图片 <!DOCTYPE html> <html> <head> <title>画板实验</title><meta ...

  3. html5实现安卓的手写功能,html5 canvas手写字代码(兼容手机端)(示例代码)

    html5 canvas手写字代码(兼容手机端) 画板实验 清 空 生成图片 var canvas,board,img; canvas = document.getElementById('myCan ...

  4. 人工智能入门第一课:手写字体识别及可视化项目(手写画板)(mnist)

    人工智能入门第一课:手写字体识别及可视化项目(手写画板)(mnist),使用技术(Django+js+tensorflow+html+bootstrap+inspinia框架) 直接上图,项目效果 1 ...

  5. 可编辑手写PDF以图片形式转换为WORD

    可编辑手写PDF以图片形式转换为WORD 1 需求简介 2 解决方案 2.1 方案1:导出为不可编辑PDF+PDF2WORD 2.2 方案2:PDF2JPG+JPG2PDF+PDF2WORD 2.3 ...

  6. 字体大宝库:25款很好看的手写字体下载

    每个人都有自己独特的书写风格,手写字体常用于印刷.网页设计及其它创意设计任务中,能够强调设计的自然性.非正式性,让设计作品看起来更有个性.更可爱.今天这篇文章分享的好看的英文手写字体可以免费下载使用, ...

  7. 在线签名、canvas手写在线签名——小程序端实现在线签名,手写电子签名canvas

    在线签名.canvas手写在线签名--小程序端实现在线签名,手写电子签名canvas 近期公司准备接一个政府的小项目,里头有一个在线签名的需求,老板让我研究一下.于是就...开始思考: 在线手写签名, ...

  8. canvas 手写毛笔字效果

    <!doctype html> <html lang="en"> <head><meta charset="UTF-8" ...

  9. swift 将图片保存到本地_如何保存微博的所有图片链接并下载图片到本地

    点击上方 月小水长 并 设为星标,第一时间接收干货推送 这是 月小水长 的第 47 篇原创干货 对于一个爬虫,其爬取的目标不仅限于文字,图片.语音.视频均有可能,我开源的微博爬虫之话题爬虫,设定之初就 ...

最新文章

  1. shell中变量的替换
  2. CSLA.Net学习(1)——第一个小程序
  3. 揭秘硅谷进化历程:机遇无穷 成功需付出更高代价
  4. redis.conf 配置项说明
  5. php html登陆逻辑,保持演示文稿(HTML)和逻辑(PHP)分开
  6. C++primer第十章 泛型算法 10.1 概述 10.2 初识泛型算法
  7. 一文彻底掌握二叉查找树
  8. 阿里云OSS创建Access,并连接到cloudreve
  9. 没学好 Netty ,要凉?
  10. Opencl入门Demo
  11. windows下Python集成开发环境-Spyder安装和使用
  12. Android美化插件,KWGT桌面插件美化
  13. 未处理的异常: 0xC0000091: Floating-point overflow 的解决办法
  14. postman下载excel出现乱码
  15. php 499状态如何处理,HTTP499状态码 nginx下499错误及其解决方法
  16. Kubernetes Secrets 详解
  17. JS—— 常用图片后缀正则校验
  18. 春节做的2021年终总结
  19. win10远程连接服务器出现“这可能是由于credssp加密……”的原因及解决办法,win10家庭版无法找到gpedit.msc或者组策略或安全组策略
  20. 充电站网络安全风险危及电动汽车普及

热门文章

  1. python将文件夹下的图片创建到一个ppt文件
  2. python学习笔记二——阅读MakeHuman程序源码小结
  3. 0-1之间最多两位小数的正则表达式
  4. Kögra分形字体,字王锋锐、锋艺系列可以加入分形元素
  5. 编程语言 IDE 对比
  6. 王海盯上京东,假货问题是本质
  7. 自定义View-仿小米秒钟
  8. C语言永真循环,c语言第六章总结 循环语句
  9. 重整晋商雄风,再现汇通天下 -------《晋商》阅读笔记第1-4章
  10. C++学习课件(二)————面向对象