html5+canvas在线手写签名转Base64图片和签名图片下载

#亲测,已调试,开箱即用

用html5+canvas实时手写签名,可以直接转存本地图片,也可以生成Base64字符串存储到数据库中。

可以实现在线签单、在线签约功能。

代码如下,复制,存储demo.html即可。

<!DOCTYPE html>
<html>

<head>
    <title>在线手写签名</title>
    <style>
    body {
        background-color: darkcyan;
    }
    </style>
</head>

<body>
    <div>思路:在线手写电子签名,转成Base64字符串数据存储到数据库内,后续可以回调数据转成图片</div>
    <canvas id="canvas" width="200" height="150"></canvas>
    <div>
    	<button onclick="reset();">重写</button>
        <button onclick="savePic()">保存本地</button>
        <button onclick="saveSignature()">保存Base64</button>
     </div>
    <script>
    var canvas = document.getElementById('canvas');
    canvas.width = '200';
    canvas.height = '150';
    var ctx = canvas.getContext('2d');
    ctx.lineWidth = 2; //直线的宽度状态设置
    ctx.fillStyle = "#ffffff"; //直线的颜色状态设置
    ctx.strokeStyle = "#058"; //直线的颜色状态设置
    ctx.lineCap = 'round';
    ctx.lineJoin = 'round';
    ctx.fillRect(0, 0, 200, 150);
    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, 200, 150);
    }
    // 保存图片
    function savePic() {
        var link = document.createElement("a");
        var imgData = canvas.toDataURL({
            format: 'png',
            quality: 1,
            width: 200,
            height: 150
        });
        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
        });


    }

    // 保存签名为Base64编码
    function saveSignature() {
        var dataURL = canvas.toDataURL(); 	// 将画布转换为Base64编码的数据URL
        var base64 = dataURL.split(',')[1]; // 提取Base64编码部分
        									// 将Base64编码保存到数据库中(这里只是示例,需要将base64替换为您的数据库保存逻辑)
        console.log(base64); 				// 输出到控制台或使用其他方式保存到数据库中
    }
    </script>
</body>

</html>

引用

赢乐作者代码,并在其原码上改良。

原文引用icon-default.png?t=N7T8https://blog.csdn.net/shanghai597/article/details/130826638

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JACKuo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值