页面手写签名实现:利用Canvas技术将签名保存为图片

简介: 页面手写签名实现:利用Canvas技术将签名保存为图片

前言

Canvas 是 HTML5 中新增的一个元素,它是一个画布,可以用 JavaScript 在网页上绘图。Canvas 是 2D 绘图 API 的一部分,可以用于绘制图形、文字、图片等。与 SVG 不同,Canvas 是基于位图的,不能直接在上面进行复杂的几何运算,而 SVG 则是基于矢量的,可以绘制复杂的几何图形。


使用 Canvas 绘图需要先创建一个 Canvas 对象,然后获取它的 2D 上下文对象,通过这个对象来进行绘图操作。Canvas 的坐标系与 SVG 不同,它的原点在左上角,x 轴向右延伸,y 轴向下延伸。可以使用 Canvas 提供的方法来绘制各种图形,包括直线、矩形、圆形、多边形等。


除了 2D 绘图之外,Canvas 还支持 3D 绘图,可以通过 WebGL API 来实现。WebGL 是基于 OpenGL ES 2.0 的,可以在 Canvas 上实现 3D 图形渲染。使用 WebGL 可以创建更加复杂的三维效果,例如游戏、模拟器等。


Canvas 是 HTML5 中新增的一个重要功能,它提供了一个在网页上绘图的方法,可以用于创建各种图形、动画和游戏等。

html部分

添加一个canvas元素,并设置id属性,设置好尺寸大小,然后添加两个按钮,取消和确定。

<canvas id="canvas" width="800" height="600"></canvas>
<button onclick="reset();">取消</button>
<button onclick="savePic()">确定</button>

js部分

var canvas = document.getElementById('canvas');
canvas.width = '800';
canvas.height = '600';
var ctx = canvas.getContext('2d');
ctx.lineWidth = 2; //直线的宽度状态设置
ctx.fillStyle = "#ffffff"; //直线的颜色状态设置
ctx.strokeStyle = "#058"; //直线的颜色状态设置
ctx.lineCap = 'round';
ctx.lineJoin = 'round';
ctx.fillRect(0, 0, 800, 600);
let isDown = false
// 鼠标按下
canvas.addEventListener('mousedown', (e) => {
    isDown = true
    ctx.beginPath() //开始路径
    ctx.moveTo(e.offsetX, e.offsetY); //绘制点移动
})
// 鼠标移动
canvas.addEventListener('mousemove', (e) => {
    if (isDown) {
        ctx.lineTo(e.offsetX, e.offsetY); //绘制直线
        ctx.stroke() //描边
    }
})
// 鼠标抬起
document.documentElement.addEventListener('mouseup', (e) => {
    isDown = false
})
// 鼠标经过
canvas.addEventListener('mouseover', (e) => {
    canvas.style.cursor = 'crosshair'
})
// 鼠标离开
canvas.addEventListener('mouseout', (e) => {
    canvas.style.cursor = 'default'
})
// 取消
function reset() {
    ctx.fillRect(0, 0, 800, 600);
}
// 保存图片
function savePic() {
    var link = document.createElement("a");
    var imgData = canvas.toDataURL({
        format: 'png',
        quality: 1,
        width: 1920,
        height: 1080
    });
    var strDataURI = imgData.substr(22, imgData.length);
    var blob = dataURLtoBlob(imgData);
    var objurl = URL.createObjectURL(blob);
    link.download = "canvas.png";
    link.href = objurl;
    link.click();
}
 
function dataURLtoBlob(dataurl) {
    var arr = dataurl.split(','),
        mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);
    while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {
        type: mime
    });
}


这样就可以在页面中使用canvas实现手写签名了。当用户在canvas上按下鼠标并移动时,就会开始绘制签名,松开鼠标时则会结束签名。

效果预览

目录
相关文章
|
5月前
|
前端开发 算法 安全
轻松愉悦的验证方式:实现图片旋转验证功能
轻松愉悦的验证方式:实现图片旋转验证功能
154 0
|
2月前
|
开发框架 前端开发 JavaScript
利用FastReport传递图片参数,在报表上展示签名信息
利用FastReport传递图片参数,在报表上展示签名信息
|
4月前
|
Java 机器人 API
JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
JAVA实现自动打开URL对应的网页并保存为图片-不借助第三方API
43 9
|
4月前
|
存储 JSON API
随机图片API源码(附新图片数据
含1000+HTTP图片,存储于企业空间,速度媲美新浪。计划扩展更多类别。基础调用:`http:///dm`,JSON格式:`http:///dm?return=json`。返回示例: ```json {
99 0
|
PHP
PHP实现自制随机图片API- 调用文件夹和引用网络图片
PHP实现随机图片API- 调用文件夹和引用网络图片
188 0
|
10月前
|
API C#
C# 调用系统“API“设置图片为“桌面壁纸“
C# 调用系统“API“设置图片为“桌面壁纸“
|
11月前
|
小程序 前端开发 JavaScript
小程序调用图片接口API并居中显示
小程序调用图片接口API并居中显示
56 0
|
API
调用图片转PDF功能时返回DocProcessError错误
调用图片转PDF功能时返回DocProcessError错误
131 3
|
数据安全/隐私保护
页面加密代码,附效果演示
页面加密代码,附效果演示
|
编解码 前端开发
用canvas实现手写签名功能
用canvas实现手写签名功能
75 0