Canvas实现手写签名

效果图:

HTNL部分代码:

<div style="margin: 20px auto; text-align: center">手写签名</div>
<canvas
  id="canvasbox"
  width="500"
  height="250"
  style="border: 1px solid #c1c2c3; margin: 20px auto; display: block"
></canvas>
<div class="btn" style="margin: 0 auto; text-align: center">
  <button id="savebtn">保存</button>
  <button id="clearbtn">清空</button>
</div>

JS部分代码:

var canvasbox = document.getElementById("canvasbox");
var ctx = canvasbox.getContext("2d");
var iscanvas = false;
var offsetX = "";
var offsetY = "";
// 初始化背景颜色
ctx.fillStyle = "#f0f0f0"; // 设置背景颜色为浅灰色
ctx.fillRect(0, 0, canvasbox.width, canvasbox.height);

canvasbox.addEventListener("mousedown", function (e) {
  iscanvas = true;
  offsetX = e.offsetX;
  offsetY = e.offsetY;
});
canvasbox.addEventListener("mousemove", function (e) {
  if (iscanvas) {
    ctx.beginPath();
    ctx.moveTo(offsetX, offsetY);
    ctx.lineTo(e.offsetX, e.offsetY);
    ctx.lineWidth = 3;
    ctx.strokeStyle = "#000"; // 设置签名笔迹的颜色
    ctx.stroke();
    offsetX = e.offsetX;
    offsetY = e.offsetY;
  }
});
canvasbox.addEventListener("mouseup", function () {
  iscanvas = false;
});
canvasbox.addEventListener("mouseleave", function () {
  iscanvas = false;
});
var clearbtn = document.getElementById("clearbtn");
clearbtn.addEventListener("click", function () {
  ctx.clearRect(0, 0, canvasbox.width, canvasbox.height);
});
var savebtn = document.getElementById("savebtn");
savebtn.addEventListener("click", function () {
  downLoad(saveAsPNG(canvasbox));
});
function downLoad(url) {
  var img = document.createElement("a");
  img.download = parseInt(Math.random() * 1000000); // 设置下载的文件名,默认是'下载'
  img.href = url;
  img.style.display = "none";
  document.body.appendChild(img);
  img.click();
  img.remove(); // 下载之后把创建的元素删除
}
// 保存成png格式的图片
function saveAsPNG(canvas) {
  return canvas.toDataURL("image/png");
}

// 保存成jpg格式的图片
function saveAsJPG(canvas) {
  return canvas.toDataURL("image/jpeg");
}

如果要将 <canvas> 的背景设置为图片,您可以先使用 drawImage 方法将图片绘制到画布上,然后再开始绘制签名。

var backgroundImage = new Image();
backgroundImage.src = 'background.jpg'; // 替换为你的背景图片路径
backgroundImage.onload = function() {
    // 在图片加载完成后绘制到画布上
    ctx.drawImage(backgroundImage, 0, 0, canvasbox.width, canvasbox.height);
};

在清空画布的事件中,添加了代码来重新绘制背景图片:

ctx.clearRect(0, 0, canvasbox.width, canvasbox.height);
// 重新绘制背景图片
backgroundImage.onload = function() {
    ctx.drawImage(backgroundImage, 0, 0, canvasbox.width, canvasbox.height);
};
// 如果图片已经加载,可以直接绘制
if (backgroundImage.complete) {
    ctx.drawImage(backgroundImage, 0, 0, canvasbox.width, canvasbox.height);
}

使用图片背景后的效果图:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值