之前做过一个手绘签名功能,当时用的是第三方插件。后来看了下 canvas 文档,感觉自己写也不是很难,因此本人自己也实现了一个,支持清空画布,保存为 DataUrl ,保存为 Blob ,以及下载到本地。由于实现撤销功能需要保存 imageData ,内存开销太大,暂时先不做了。

代码如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><canvas id="myCanvas" width="800" height="500" style="border:1px solid #c3c3c3;">Your browser does not support the canvas element.</canvas><div class="tool-bar"><button onclick="clearDrawer()">重画</button><button onclick="handleSaveDataUrl()">保存为DataUrl</button><button onclick="handleSaveBlob()">保存为Blob</button><button onclick="handleDownload()">保存到本地</button></div>
</body>
<script type="text/javascript">var x = 0;var y = 0;var c = document.getElementById("myCanvas");var cxt = c.getContext("2d");c.onmousedown = function (e) {x = e.clientX - 8;y = e.clientY - 8;c.onmousemove = function (e) {var newX = e.clientX - 8;var newY = e.clientY - 8;cxt.moveTo(x, y);cxt.lineTo(newX, newY);cxt.stroke();x = newX;y = newY;}}c.onmouseout = function (e) {// 鼠标移出绘图区域停止绘图c.onmousemove = null;}c.onmouseup = function (e) {// 鼠标按键松开停止绘图c.onmousemove = null;}function clearDrawer() {// 当 canvas 的高度或宽度被重设时,画布内容就会被清空c.height=c.height;}// 鉴于 imageData 的内存开销比较大,撤销功能先不做了// function savaPath() {//     imageData = cxt.getImageData(0,0,c.width,c.height);// }// function goBack() {//     if (!imageData) return//     cxt.putImageData(imageData,0,0);// }function handleSaveDataUrl() {console.log(c.toDataURL())// 调用接口将Base64字符串传给后台}function handleSaveBlob() {c.toBlob((blob) => {console.log(blob)// 调用接口将二进制文件流传给后台// 注意请求头的Content-type: application/octet-stream})}function handleDownload() {let time = new Date().getTime();c.toBlob((blob) => {let objectUrl = URL.createObjectURL(blob);let a = document.createElement('a');a.href = objectUrl;a.download = `测试下载-${time}.png`;document.body.appendChild(a);a.click();// URL.revokeObjectURL(objectUrl);a.remove();})}</script>
</html>

更多 API 参考:
HTML 5 Canvas 参考手册

使用 canvas 实现手写绘图功能相关推荐

  1. 用canvas实现手写签名功能

    更多文章 最近开发网站有一个需求,要求页面上有一块区域,用户能用鼠标在上面写字,并能保存成图片 base64 码放在服务器. 这样的需求用 canvas 实现是最好的. 需要用到 canvas 的以下 ...

  2. uniapp使用canvas完成手写电子签名

    uniapp使用canvas完成手写电子签名 效果 <template><view ><canvas class="mycanvas" canvas- ...

  3. android 手写签批_Android自定义实现手写签名功能

    一.Android自定义View步骤 : 自定义属性: 选择和设置构造方法: 重写onMeasure()方法: 重写onDraw()方法: 重写onLayout()方法: 重写其他事件的方法(滑动监听 ...

  4. android 电子签名 手写签名 功能实现

    android 电子签名  手写签名 功能实现 这个手写的效果 就是一个 重写的的自定义的view  代码如下: package com.example.hand.views;import java. ...

  5. 微信小程序Canvas实现手写签名

    微信小程序Canvas实现手写签名 功能描述 点击按钮显示弹窗,弹窗主体为签名板,底部两个按钮为清除和保存. 清除按钮:清空签名板 保存按钮:保存签名为图片,并关闭弹窗 关键点分析 Canvas实现手 ...

  6. vue+canvas实现手写签字画板

    vue+canvas实现手写签字画板 效果 预览 体验地址 用途 涂鸦画板 签名板 实现 使用canvas,通过监听鼠标动作来进行绘图. 关键代码如下: drawing(event){if(!this ...

  7. pc端签名 vue 生成图片_vue 使用 canvas 实现手写电子签名

    功能 兼容 PC 和 Mobile: 画布自适应屏幕大小变化(窗口缩放.屏幕旋转时画布无需重置,自动校正坐标偏移): 自定义画布尺寸(导出图尺寸),画笔粗细.颜色,画布背景色: 支持裁剪 (针对需求: ...

  8. 有道云笔记android手写,有道云笔记Android1.1.0发布:新增手写涂鸦功能

    有道笔记是网易旗下有道搜索推出的笔记类知识管理软件,已于12月6日正式改名有道云笔记,同时发布了PC平台上的1.4版,并于12月8日发布了Android版有道云笔记1.1.0.新版有道云笔记(Andr ...

  9. canvas实现手写签名

    使用canvas实现手写签名,效果如下 PC端 // 实现canvas签名var canvas = document.getElementById('canvas');var ctx = canvas ...

最新文章

  1. 《数据科学家养成手册》第十一章------算法学1(穷举,分治,回溯,贪心,迭代)
  2. 如何面试java后端_近期面试Java后端的一些感悟
  3. linux+C环境下动态管理头文件和库文件
  4. xssfsheet removerow 剩下空白行怎么处理_你看不上的农业会计!我却凭借其账务处理,过上你求之不得的生活...
  5. mysql8区分大小写_mysql8 参考手册--区分大小写
  6. java 实现雷达图,如何使用y轴为0到100的chart.js创建雷达图?
  7. P1282 多米诺骨牌 (差值DP+背包)
  8. 结构体对齐,结构体深拷贝和浅拷贝
  9. sublime存模板_Sublime Text新建.vue模板并高亮
  10. 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放
  11. 振作起来– Spring Framework 4.0即将来临!
  12. 线性代数向量内积_向量的外积| 使用Python的线性代数
  13. extundelete反删除总结
  14. HTML5获取地理位置定位信息
  15. 研究生不知道怎么看论文?赶紧把学长的经验码起来
  16. Win32汇编——文件操作
  17. java读取文件封装的一个类(有部分代码借鉴别人的)
  18. matlab 乱七八糟求最大值~
  19. rtklib-eph2pos-利用广播星历计算卫星的PVC-详细解说
  20. 怎样自己创建一个个人网站,怎样将自己写的网站发布到外网?

热门文章

  1. 中小企业数字化转型的现状分析
  2. 西红柿鸡蛋热面烹饪步骤
  3. 后台管理系统模板 - zhadminvue
  4. Android 网络性能优化(4)弱网优化
  5. 网站广告深度点击是指什么?视频广告点击 广告点击优化 cpc广告点击优化
  6. 从程序员的尽头是业务说起
  7. 前华为员工的爆料帖子,让我看清了职场上最赤裸裸的真相
  8. 3种可以拆分PDF文档页面的简单方法
  9. WLAN无线技术之旁挂二层组网配置AC+AP+ENSP组网配置
  10. 开有多个门店的小老板如何记账和给员工发工资?