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

本文介绍了HTML5的Canvas元素,它是用于网页2D和3D绘图的API。通过JavaScript,可以在Canvas上绘制图形、线条和填充颜色,甚至创建3D效果。文中提供了示例代码,展示如何利用Canvas实现手写签名功能,用户可以点击并拖动鼠标在Canvas上绘制,松开鼠标后完成签名,同时提供了保存图片的功能。
摘要由CSDN通过智能技术生成

目录

前言

html部分

js部分

效果预览


前言

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上按下鼠标并移动时,就会开始绘制签名,松开鼠标时则会结束签名。

效果预览

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现手写签名保存图片,可以使用HTML5Canvas元素和JavaScript编写代码。 以下是一个简单的实现步骤: 1. 在HTML文件中创建一个Canvas元素,并设置它的宽度和高度。 ```html <canvas id="signature" width="400" height="200"></canvas> ``` 2. 在JavaScript文件中获取Canvas元素和它的上下文。 ```javascript var canvas = document.getElementById("signature"); var ctx = canvas.getContext("2d"); ``` 3. 添加事件监听器,以便在用户在Canvas上绘制时捕获鼠标或触摸事件。 ```javascript canvas.addEventListener("mousedown", startDrawing); canvas.addEventListener("mousemove", draw); canvas.addEventListener("mouseup", stopDrawing); canvas.addEventListener("touchstart", startDrawing); canvas.addEventListener("touchmove", draw); canvas.addEventListener("touchend", stopDrawing); ``` 4. 实现绘制函数。在mousedown或touchstart事件发生时,将Canvas上下文的起始点设置为鼠标或触摸位置。在mousemove或touchmove事件发生时,使用Canvas上下文的lineTo方法绘制直线。最后,在mouseup或touchend事件发生时,停止绘制。 ```javascript var isDrawing = false; function startDrawing(e) { isDrawing = true; ctx.beginPath(); var x = e.pageX - canvas.offsetLeft; var y = e.pageY - canvas.offsetTop; ctx.moveTo(x, y); } function draw(e) { if (!isDrawing) return; var x = e.pageX - canvas.offsetLeft; var y = e.pageY - canvas.offsetTop; ctx.lineTo(x, y); ctx.stroke(); } function stopDrawing() { isDrawing = false; } ``` 5. 添加保存功能。将Canvas元素转换为图片并将其保存到本地。 ```javascript function saveImage() { var image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); var link = document.createElement("a"); link.download = "signature.png"; link.href = image; link.click(); } ``` 最后,在HTML文件中添加一个保存按钮,并在JavaScript文件中添加事件监听器。 ```html <button onclick="saveImage()">保存签名</button> ``` 这样就可以实现手写签名保存图片的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹荣乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值