Canvas画布基本功能及实现网页签名功能

news/2024/11/28 23:52:27/

canvas 简介

<canvas> 是 HTML5 新增的,一个可以使用脚本(通常为 JavaScript) 在其中绘制图像的 HTML 元素。它可以用来制作照片集或者制作简单(也不是那么简单)的动画,甚至可以进行实时视频处理和渲染。和所有 DOM 元素一样,拥有自己的属性、方法和事件,其中包含绘图的方法。

​它最初由苹果内部使用自己 MacOS X WebKit 推出,供应用程序使用像仪表盘的构件和 Safari 浏览器使用。后来,有人通过 Gecko 内核的浏览器 (尤其是 Mozilla和Firefox),Opera 和 Chrome 和超文本网络应用技术工作组建议为下一代的网络技术使用该元素。

​Canvas 是由 HTML 代码配合高度和宽度属性而定义出的可绘制区域。JavaScript 代码可以访问该区域,类似于其他通用的二维 API,通过一套完整的绘图函数来动态生成图形。通过 JavaScript 脚本可以调用绘图 API 在网页上完成绘图功能。

Canvas 是 HTML5 中最强大的特性之一。允许开发者使用动态和交互的方法,在 Web 上实现桌面应用程序的功能。

​ Mozilla 程序从 Gecko 1.8 (Firefox 1.5) 开始支持 <canvas>, Internet Explorer 从 IE9 开始 <canvas> 。Chrome 和 Opera 9+ 也支持 <canvas>。

Canvas 是 HTML5 新推出的元素标签,用户图形绘制。

canvas基本使用

     Canvas 元素可以在网页中创建一个空白的矩形区域。

  通过 API(JavaScript)可以操作这个区域。

  默认情况下,创建的 Canvas 元素没有边框和内容。

<canvas id="canvasBox" width="" height=""></canvas>
<!--
注解:canvas必须是闭合标签</canvas>不可省,如果省略文档的其他内容将不会显示
只有两个属性width和height如果没用设置宽高默认宽300高150-->

        js文件中:

const canvasBox=document.querySelector("#canvasbox");//获取画布元素
const ctx=canvasBox.getContext(contextType);
/*获取渲染上下文(具备了绘制和处理展示内容的能力)
contextType参数有
2d:绘制2d图像(创建一个CanvasRenderingContext2D对象作为2d渲染的上下文)
webgl(experimental-webgl)、webgl2:绘制3d图像(实验性)
bitmaprenderer:把位图绘制在canvas上下文上(实验性)
*/

        下面是 Canvas 的基本方法:

         获取 Canvas 上下文对象

                 使用 canvas.getContext('2d') 方法可以获取绘图上下文对象,例如:

const canvas = document.getElementById('mycanvas');
const ctx = canvas.getContext('2d');

         绘制形状及填充颜色

                 使用绘图上下文对象的 fillRect()strokeRect() 方法添加矩形,使用 fill()stroke() 填充或者描边形状;使用 fillStylestrokeStyle 属性设置形状内部或外部的颜色,例如:

ctx.fillStyle = 'red';
ctx.fillRect(10, 10, 100, 100);

         绘制图像

                 使用 drawImage() 方法绘制图像,它可以将图片、画布或视频作为图像绘制到画布上,例如:

const img = new Image();
img.onload = function() {ctx.drawImage(img, 0, 0);
}
img.src = 'example.png';

         绘制文本

                 使用 fillText()strokeText() 方法绘制文本,例如:

ctx.font = '20px Arial';
ctx.fillText('Hello World!', 50, 50);

         绘制路径

                 使用 beginPath() 开始路径,然后使用 moveTo() 移动当前点,使用 lineTo()arc()quadraticCurveTo() 创建路径,最后使用 fill()stroke() 方法绘制路径,例如:

ctx.beginPath();
ctx.moveTo(10, 10);
ctx.lineTo(50, 50);
ctx.stroke();

         以上是 Canvas 的基本方法,还有很多高级的方法可以用于绘制复杂图形或动画,这里就不一一说了,具体可以去看看api。

 Canvas示例:实现网页签名功能        

        开发中,偶尔会遇到签名功能,使用 Canvas 可以方便地实现签名功能,以下是一个简单的示例:

 HTML 代码:

<div><canvas id="signatureCanvas" width="300" height="200"></canvas><button onclick="clearSignature()">清除</button><button onclick="saveSignature()">保存</button>
</div>

 JavaScript 代码:

const canvas = document.getElementById('signatureCanvas');
const ctx = canvas.getContext('2d');let isDrawing = false;
let lastX, lastY;// 鼠标按下事件
function handleMouseDown(e) {isDrawing = true;[lastX, lastY] = [e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop];
}// 鼠标移动事件
function handleMouseMove(e) {if (!isDrawing) return; // 如果鼠标没有按下,则退出函数const x = e.clientX - canvas.offsetLeft;const y = e.clientY - canvas.offsetTop;ctx.beginPath();ctx.moveTo(lastX, lastY);ctx.lineTo(x, y);ctx.stroke();[lastX, lastY] = [x, y];
}// 鼠标释放事件
function handleMouseUp() {isDrawing = false;
}// 清除签名
function clearSignature() {ctx.clearRect(0, 0, canvas.width, canvas.height);
}// 保存签名
function saveSignature() {const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);// 将图片数据转换成 base64 格式const base64ImageData = canvas.toDataURL();console.log(base64ImageData);
}// 绑定事件
canvas.addEventListener('mousedown', handleMouseDown);
canvas.addEventListener('mousemove', handleMouseMove);
canvas.addEventListener('mouseup', handleMouseUp);

        一个简单的签名功能就实现了:

上述代码使用 Canvas 绘图 API,监听鼠标按下、移动和释放的事件,并在鼠标移动时绘制签名。同时也提供了清除签名和保存签名功能。其中,ctx.getImageData() 函数可以获取到画布中的图片数据,可以将其转换成 base64 格式,以便于保存。


http://www.ppmy.cn/news/109718.html

相关文章

2023年9月数学建模:黄河小浪底调水调沙问题

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 1. 引言 2. 黄河小浪底水利枢纽工程概述 3. 调水调沙问题的数学建模 3.1 调水问题的数学建模 3.2 调沙问题的数学建模 4. 数学建模案例…

基于深度学习的高精度山羊检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度山羊检测识别系统可用于日常生活中或野外来检测与定位山羊目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的山羊目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

6.S081——补充材料——RISC-V架构中的异常与中断详解

0.briefly speaking 我在阅读Xv6源码过程中对很多概念感到困惑&#xff0c;想到也许会有其他人对此秉持同样的困惑&#xff0c;所以我将我的研究和学习过程总结下来并编篡成如下的博客。本篇博客想对RISC-V标准中有关中断和异常的概念进行一个梳理&#xff0c;考虑RISC-V标准的…

操作系统 -- 缓冲区(buffer)与缓存(cache)

一、缓冲区&#xff08;Buffer&#xff09; 1.什么是缓冲区 缓冲区(buffer)&#xff0c;它是内存空间的一部分。也就是说&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;这些存储空间用来缓冲输入或输出的数据&#xff0c;这部分预留的空间就叫做缓冲区&#xff0…

《Java并发编程实战》课程笔记(三)

Java 内存模型&#xff1a;看 Java 如何解决可见性和有序性问题 什么是 Java 内存模型&#xff1f; 导致可见性的原因是缓存&#xff0c;导致有序性的原因是编译优化&#xff0c;那解决可见性、有序性最直接的办法就是禁用缓存和编译优化&#xff0c;但是这样问题虽然解决了&…

手写一个webpack loader

loader的本质 loader 本质上是导出为函数的 JavaScript 模块。当webpack解析资源时&#xff0c;会调用相应的 loader 去处理&#xff0c;然后将上一个 loader 产生的结果或者资源文件传入进去。loader 有三个入参&#xff1a;资源文件的内容&#xff08;content&#xff09;、可…

SpringBoot框架理解

1 SpringBoot入门 1.2 什么是SpringBoot 1 官网的解释 ​ Spring在官方首页是这么说的&#xff1a;说使用SpringBoot可以构造任何东西&#xff0c;SpringBoot是构造所有基于Spring的应用程序的起点,SpringBoot在于通过最少的配置为你启动程序。 2 我的理解 SpringBoot是Sp…

Quartz组成部分和实现案例

Quartz 是一个功能强大且广泛使用的开源任务调度框架&#xff0c;它的组成部分包括&#xff1a; Job&#xff08;任务&#xff09;&#xff1a;Job 是需要被调度执行的具体任务逻辑。开发者需要实现 Job 接口&#xff0c;并编写具体的任务逻辑代码。JobDetail&#xff08;任务…