当前位置: 首页 > news >正文

掌握创意之钥:全面解析HTML5 Canvas

在数字时代,表达创意的方式多种多样,而 HTML5 中的 <canvas> 元素无疑为网页开发者提供了一个强大的工具箱。无论你是想要创建动态图表、互动游戏还是复杂的可视化应用,掌握 Canvas 的基本用法都是迈向成功的关键一步。本文将带你一步步了解如何开始使用 Canvas,并通过多个实例展示其强大功能。

一、Canvas 元素基础

1、创建 Canvas 元素

在 HTML 中,<canvas> 元素是一个容器,用于在网页中进行动态绘图。它本身并不会显示任何内容,只有通过 JavaScript 操作才能渲染图形。

<canvas id="myCanvas" width="500" height="400"></canvas>

在上述代码中,我们创建了一个宽度为 500 像素,高度为 400 像素的 <canvas> 元素。如果未指定 widthheight 属性,Canvas 会默认具有 300px 宽和 150px 高。但是,实际应用中,我们通常会为 Canvas 指定明确的宽高值。

需要特别注意的是,Canvas 本身是透明的,它不会自动显示任何内容。您必须使用 JavaScript 代码在 Canvas 上绘制图形、文本或其他内容。

2、获取上下文(Context)

要在 Canvas 上进行绘制操作,我们需要通过 JavaScript 获取一个“绘图上下文”(Context)。上下文是执行绘图命令的环境,它有不同的类型,最常用的是 2d,即二维绘图上下文。

获取 Canvas 上下文的代码如下:

const canvas = document.getElementById('myCanvas');  // 获取 Canvas 元素
const ctx = canvas.getContext('2d');  // 获取二维绘图上下文
  • getContext('2d'):这个方法返回一个 2D 渲染上下文对象(ctx),可以使用该对象来绘制形状、图像、文本等。
  • 其他类型的上下文(例如 webgl,用于 3D 图形)可以用于更高级的绘制操作,但在基础使用中,2d 是最常用的。

ctx 对象提供了大量的方法和属性,用于操作和绘制不同的图形元素。例如,您可以使用 ctx.beginPath() 来开始一个绘制路径,使用 ctx.fillRect() 绘制矩形,使用 ctx.arc() 绘制圆形等等。简言之,所有的绘图操作都需要依赖于 ctx 对象。

二、绘制基本形状

1、绘制矩形

矩形是绘图中最常见的基本形状之一。在 Canvas 中,可以通过 fillRect() 方法绘制填充矩形,或通过 strokeRect() 绘制空心矩形(描边矩形)。这两个方法的参数均为矩形的 x, y 坐标(矩形左上角的位置)、宽度高度

  • fillRect(x, y, width, height):绘制一个填充矩形,矩形的填充颜色由 fillStyle 控制。
  • strokeRect(x, y, width, height):绘制一个空心矩形,矩形的描边颜色由 strokeStyle 控制。
// 绘制一个填充的矩形
ctx.fillStyle = 'blue';  // 设置填充颜色
ctx.fillRect(50, 50, 200, 100);  // 绘制矩形,左上角坐标(50, 50),宽200px,高100px// 绘制一个空心矩形
ctx.strokeStyle = 'red';  // 设置描边颜色
ctx.lineWidth = 5;        // 设置描边宽度为5px
ctx.strokeRect(100, 150, 200, 100);  // 绘制矩形,左上角坐标(100, 150),宽200px,高100px

补充说明:

  • fillStylestrokeStyle 属性决定了填充和描边的颜色或渐变效果。
  • lineWidth 用于设置描边的线条宽度。
  • 通过 fillRect()strokeRect(),您可以控制矩形的大小、位置、颜色和边框等。

2、绘制圆形

Canvas 中绘制圆形或弧形,主要是通过 arc() 方法来实现。arc() 方法不仅可以绘制完整的圆,还可以绘制部分圆弧。该方法的参数包括圆心的坐标、半径、起始角度、结束角度以及旋转方向。

// 绘制一个圆形
ctx.beginPath();  // 开始新的路径
ctx.arc(250, 250, 100, 0, Math.PI * 2);  // 绘制圆心为(250, 250),半径100的圆,起始角度0,结束角度 2π(即完整圆)
ctx.fillStyle = 'green';  // 设置填充颜色为绿色
ctx.fill();  // 填充路径,即绘制圆形// 绘制圆形的边框
ctx.lineWidth = 5;  // 设置描边宽度为5px
ctx.strokeStyle = 'orange';  // 设置边框颜色为橙色
ctx.stroke();  // 绘制圆形的边框

补充说明:

  • arc(x, y, radius, startAngle, endAngle)xy 定义圆心的位置,radius 是圆的半径,startAngleendAngle 定义弧形的起始和结束角度(单位是弧度,1 圈为 Math.PI * 2)。
  • fill() 用于填充路径,而 stroke() 用于描边路径,您可以同时使用这两个方法来创建既有填充又有边框的圆形。
  • 可以通过调整 lineWidthstrokeStyle,来改变圆形边框的宽度和颜色。

3、弧形绘制

除了绘制完整的圆形,您还可以利用 arc() 绘制 弧形,即圆的一部分。

// 绘制一个弧形
ctx.beginPath();
ctx.arc(250, 250, 100, Math.PI / 4, Math.PI * 3 / 4);  // 从 45° 到 135° 绘制一个弧形
ctx.lineWidth = 5;
ctx.strokeStyle = 'blue';
ctx.stroke();  // 描边弧形

绘制了一个从 45° 到 135° 的弧,Math.PI / 4 是起始角度(45°),Math.PI * 3 / 4 是结束角度(135°)。这样您可以灵活控制绘制的弧形部分。

4、绘制线条

绘制线条通常是通过 Canvas 中的路径机制来实现的。在绘制线条之前,我们需要调用 beginPath() 来开始一个新的路径,使用 moveTo() 设置起点坐标,再通过 lineTo() 设置终点坐标,最后调用 stroke() 来描边路径。

简单的直线
ctx.beginPath();  // 开始路径
ctx.moveTo(50, 300);  // 设置起点 (50, 300)
ctx.lineTo(450, 300);  // 设置终点 (450, 300)
ctx.strokeStyle = 'purple';  // 设置描边颜色为紫色
ctx.lineWidth = 3;  // 设置线条宽度为 3px
ctx.stroke();  // 绘制线条

详细说明:

  • beginPath():开始新的路径,确保前面的路径不被干扰。
  • moveTo(x, y):将路径的起点设置为指定的坐标(x, y),不会绘制线条,只是移动到该位置。
  • lineTo(x, y):从当前位置绘制一条直线到指定的坐标(x, y)。
  • stroke():描边当前路径,将其显示在 Canvas 上,默认情况下使用黑色,除非通过 strokeStyle 设置了颜色。
曲线和其他线条

Canvas 还可以绘制其他类型的曲线,如贝塞尔曲线。下面是一个绘制二次贝塞尔曲线的例子:

ctx.beginPath();
ctx.moveTo(50, 300);  // 起点
ctx.quadraticCurveTo(250, 100, 450, 300);  // 二次贝塞尔曲线,控制点(250, 100),终点(450, 300)
ctx.strokeStyle = 'blue';
ctx.lineWidth = 3;
ctx.stroke();  // 描边
  • quadraticCurveTo(cp1x, cp1y, x, y):绘制一条二次贝塞尔曲线,控制点为 (cp1x, cp1y),终点为 (x, y)

通过类似的方式,您还可以使用 bezierCurveTo() 绘制三次贝塞尔曲线,或通过 arcTo() 绘制圆角路径。

5、绘制多边形

绘制多边形的核心在于通过多次调用 lineTo() 来连接每个顶点。可以使用 closePath() 方法将路径封闭,从而形成一个完整的多边形。如果需要填充颜色,可以调用 fill() 方法。

绘制三角形
ctx.beginPath();
ctx.moveTo(200, 100);  // 设置起点
ctx.lineTo(300, 100);  // 连接第二个顶点
ctx.lineTo(250, 200);  // 连接第三个顶点
ctx.closePath();  // 关闭路径,自动回到起点
ctx.stroke();  // 绘制边框
ctx.fillStyle = 'yellow';  // 设置填充颜色
ctx.fill();  // 填充颜色

详细说明:

  • moveTo(x, y):设置多边形的起点。
  • lineTo(x, y):通过多个调用 lineTo() 来连接多边形的各个顶点。
  • closePath():将路径从当前终点返回到起点,从而封闭路径。
  • stroke():描边路径,绘制多边形的轮廓。
  • fill():填充路径内部区域,使用 fillStyle 设置填充颜色。
绘制五边形

如果您想绘制一个规则的五边形,可以通过计算顶点的坐标,然后依次连接每个顶点来绘制。下面是一个五边形的例子:

const centerX = 250;
const centerY = 250;
const radius = 100;  // 五边形的半径ctx.beginPath();
ctx.moveTo(centerX + radius, centerY);  // 从五边形的第一个顶点开始for (let i = 1; i < 5; i++) {const angle = i * (Math.PI * 2 / 5);  // 计算每个角度const x = centerX + radius * Math.cos(angle);  // 计算 x 坐标const y = centerY + radius * Math.sin(angle);  // 计算 y 坐标ctx.lineTo(x, y);  // 连接每个顶点
}ctx.closePath();  // 关闭路径,连接最后一个顶点与起点
ctx.stroke();  // 绘制五边形的边框
ctx.fillStyle = 'cyan';  // 设置填充颜色为青色
ctx.fill();  // 填充五边形

补充说明:

  • 为了绘制规则的多边形,我们通过计算顶点的位置。角度使用弧度表示,因此使用 Math.PI * 2 / 5 来计算每个顶点的角度。
  • Math.cos(angle)Math.sin(angle) 用于计算每个顶点的坐标。

三、图形样式

1、颜色和透明度

ctx.fillStyle = 'rgba(255, 0, 0, 0.5)'; // 半透明红色
ctx.strokeStyle = 'rgb(0, 0, 255)'; // 蓝色

2、渐变

可以使用线性渐变或径向渐变。

const gradient = ctx.createLinearGradient(0, 0, 100, 100);
gradient.addColorStop(0, 'red');
gradient.addColorStop(1, 'blue');
ctx.fillStyle = gradient;
ctx.fillRect(100, 100, 100, 100);

3、阴影

设置阴影的颜色、模糊程度、偏移量等。

ctx.shadowColor = 'black';
ctx.shadowBlur = 10;
ctx.shadowOffsetX = 5;
ctx.shadowOffsetY = 5;
ctx.fillRect(100, 100, 100, 100);

四、文本绘制

Canvas 支持绘制文本,使用 fillText()strokeText() 方法。

1、绘制填充文本

ctx.font = '30px Arial';  // 设置字体样式
ctx.fillStyle = 'black';  // 设置填充颜色
ctx.fillText('Hello Canvas!', 50, 50);  // 绘制文本

2、绘制描边文本

ctx.lineWidth = 2;
ctx.strokeStyle = 'red';  // 设置描边颜色
ctx.strokeText('Hello Canvas!', 50, 100);  // 绘制文本轮廓

3、文本对齐

可以通过textAlign属性设置文本对齐方式。

ctx.textAlign = 'center'; // 或 'left', 'right'
ctx.fillText('Centered Text', 200, 200);

4、文本基线

通过textBaseline属性设置文本的垂直对齐方式。

ctx.textBaseline = 'middle'; // 或 'top', 'bottom'等
ctx.fillText('Middle Baseline', 300, 300);

五、图片绘制

Canvas 不仅可以绘制简单的图形,还可以加载和显示图片。通过 drawImage() 方法可以将图片绘制到 canvas 上。

1、图像处理

  • 绘制完整的图片
const img = new Image();  // 创建一个图片对象
img.src = 'example.jpg';  // 设置图片源img.onload = function() {ctx.drawImage(img, 50, 50, 400, 300);  // 将图片绘制到 canvas 上
};
  • 绘制图片的某一部分
// 绘制图片的部分区域(剪切区域)
img.onload = function() {ctx.drawImage(img, 100, 100, 200, 200, 50, 50, 200, 200);// 参数依次是:图片,源 x, 源 y, 源宽, 源高,目标 x, 目标 y, 目标宽, 目标高
};

如果只想绘制图片的某一部分,可以使用 drawImage() 的重载形式。

2、变换

通过translate(), rotate(), 和 scale()方法来变换坐标系。

ctx.translate(100, 100); // 移动坐标原点
ctx.rotate(Math.PI / 4); // 旋转45度
ctx.scale(2, 2); // 缩放2倍
ctx.fillRect(0, 0, 100, 100); // 绘制矩形

3、复合操作

ctx.globalCompositeOperation = 'destination-over'; // 将新内容绘制在现有内容下方
ctx.fillRect(100, 100, 100, 100);

六、动画效果

Canvas 也可以用于创建动画效果。通过不断更新画布内容并重新绘制图形,可以实现动画效果。

1、使用 requestAnimationFrame

let x = 0;
const animate = function() {ctx.clearRect(0, 0, canvas.width, canvas.height);  // 清空画布ctx.beginPath();ctx.arc(x, 250, 30, 0, Math.PI * 2);  // 绘制圆ctx.fillStyle = 'blue';ctx.fill();x += 5;  // 每次增加 x 坐标,动画会往右移动if (x < canvas.width) {requestAnimationFrame(animate);  // 请求下一帧}
};animate();  // 启动动画

使用 requestAnimationFrame() 来创建流畅的动画效果。这个方法可以让浏览器优化帧率,确保动画的流畅性。

小结

通过 <canvas>,我们可以在网页中绘制各种图形、图片和文本,甚至可以实现动态效果和动画。掌握了 canvas 的基本操作后,您可以进一步探索更复杂的图形处理和交互式绘制应用。

原文地址

相关文章:

掌握创意之钥:全面解析HTML5 Canvas

在数字时代&#xff0c;表达创意的方式多种多样&#xff0c;而 HTML5 中的 <canvas> 元素无疑为网页开发者提供了一个强大的工具箱。无论你是想要创建动态图表、互动游戏还是复杂的可视化应用&#xff0c;掌握 Canvas 的基本用法都是迈向成功的关键一步。本文将带你一步步…...

mac port 安装redis 并设置为系统服务 自定义配置方法

mac系统中&#xff0c;port 包管理工具比brew的速度快N倍&#xff0c;今天就给大家分享一下在macos系统中如何使用 port安装 redis数据库并配置为服务自动启动和自定义redis.conf配置的方法。 1. 安装redis sudo port install redis 2. 启动redis服务 sudo port load redis …...

Agent AI: Surveying the Horizons of Multimodal Interaction---摘要、引言、代理 AI 集成

题目 智能体AI:多模态交互视野的考察 论文地址&#xff1a;https://arxiv.org/abs/2401.03568 图1&#xff1a;可以在不同领域和应用程序中感知和行动的Agent AI系统概述。Agent AI是正在成为通用人工智能&#xff08;AGI&#xff09;的一个有前途的途径。Agent AI培训已经证…...

二百七十八、ClickHouse——将本月第一天所在的那一周视为第一周,无论它是从周几开始的,查询某个日期是本月第几周

一、目的 ClickHouse指标表中有个字段week_of_month&#xff0c;含义是这条数据属于本月第几周。 而且将本月第一天所在的那一周视为第一周&#xff0c;无论它是从周几开始的。比如2024-12-01是周日&#xff0c;即12月第一周。而2024-12-02是周一&#xff0c;即12月第二周 二…...

Unity 相机旋转及角度限制

前言 由于欧拉角具有直观的可读性&#xff0c;做相机旋转时选择修改eulerAngles 来实现旋转&#xff0c;但实际效果与预期稍有不同&#xff0c;这是因为欧拉角受到万向锁&#xff08;Gimbal Lock&#xff09;的影响&#xff0c;在赋值时需要对输入的角度进行调整。 if (value…...

基于CentOS系统利用Kamailio搭建企业级SIP服务器

一、Kamailio简介 Kamailio是一款开源的SIP服务器&#xff0c;具有高性能、可扩展、模块化等特点。它广泛应用于VoIP、即时通讯、视频会议等领域。Kamailio支持多种操作系统&#xff0c;如Linux、FreeBSD等&#xff0c;可以与其他开源项目&#xff08;如 Asterisk、FreeSWITCH…...

部署项目报错

vue2项目部署后 Error: Cannot find module /views/*** 1.起因 登录页、首页等静态页面可以正常进入&#xff0c;后端访问也正常&#xff0c;可以获取到验证码。 但是登录之后会发现首页空白或者进入不到首页 F12查看有报错信息&#xff1a;Error: Cannot find module ‘/v…...

【AIGC】大模型面试高频考点-位置编码篇

【AIGC】大模型面试高频考点-位置编码篇 &#xff08;一&#xff09;手撕 绝对位置编码 算法&#xff08;二&#xff09;手撕 可学习位置编码 算法&#xff08;三&#xff09;手撕 相对位置编码 算法&#xff08;四&#xff09;手撕 Rope 算法&#xff08;旋转位置编码&#xf…...

钓鱼攻击详解:鱼叉攻击与水坑攻击

钓鱼攻击详解&#xff1a;鱼叉攻击与水坑攻击 在现代网络安全领域中&#xff0c;钓鱼攻击&#xff08;Phishing&#xff09;是一种最常见且有效的攻击手段。它通过欺骗用户&#xff0c;引导其泄露敏感信息或执行恶意操作&#xff0c;从而为攻击者打开大门。本文将深入介绍两种…...

如何在自动化安全测试中,实现多工具集成与数据融合,以提高对Spring Boot应用程序安全漏洞的检测效率与准确性?

为了在自动化安全测试中实现多工具集成与数据融合&#xff0c;以提高对Spring Boot应用程序安全漏洞的检测效率与准确性&#xff0c;可以采取以下策略和方法&#xff1a; 文章目录 1. 工具选择与集成2. 数据标准化与聚合3. 数据分析与融合4. 持续改进5. 实施示例 1. 工具选择与…...

框架篇面试

一、Spring框架中的单例bean的安全性 Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的&#xff1b;因为一般在spring的bean中注入的都是无状态的对象&#xff0c;所以没有线程安全问题。但是如果在bean中定义了可修改的成员变量&#xff0c;…...

STM32滴答定时器SysTick理解+时基设置(4.1)

文章目录 1. 什么是滴答定时器&#xff1f;2. SysTick定时器初始化2.1 systick定时器时钟源&#xff1f;2.2 定时器四个寄存器 3 函数设置3.1SysTick_Config&#xff08;uint32_t ticks&#xff09;函数3.2初始化函数 4. 延时函数实现4.1 ms延时思路及实现4.2 us延时 1. 什么是…...

数字化时代下的企业合规管理:全球化背景下的挑战与机遇

在全球化浪潮的推动下&#xff0c;企业合规管理已成为企业发展中不可或缺的一部分。随着各国法规日益严格&#xff0c;以及数字化技术的飞速发展&#xff0c;企业在扩展业务的同时&#xff0c;也面临着越来越多的合规挑战。有效的合规管理不仅有助于提高企业的管理水平和运营效…...

读《Effective Java》笔记 - 条目17

条目17&#xff1a;使可变性最小化 为什么要使可变性最小化&#xff1f; 不可变对象天然是线程安全的&#xff0c;可以在多个线程之间安全共享。而可变对象需要添加额外的同步机制保证线程安全。不可变对象一旦创建就不会改变&#xff0c;便于追踪和理解代码。而可变对象的状态…...

对比json数据是否变化

在 JavaScript 中&#xff0c;你可以使用多种方法来对比两个 JSON 数据是否发生变化。以下是几种常见的方式&#xff1a; 1. 使用 JSON.stringify 最简单的方法是将两个 JSON 对象序列化为字符串&#xff0c;并比较这些字符串。但需要注意的是&#xff0c;这种方法对于对象属…...

云计算实验室建设方案

一、云计算实验室建设方案 云计算实验教学整体解决方案&#xff0c;包括&#xff1a;云计算服务器集群、云计算实训平台、实训课程体系、行业实战课程系统、行业数据等&#xff0c;系统性地解决云计算实训教学的痛点问题。 【硬件系统】云计算实训一体机 云计算实训一体机是唯…...

一、理论基础-PSI

之前参加了隐语第2期&#xff0c;对隐语SecretFlow框架有了大致的了解&#xff0c;这次参加隐语第4期&#xff0c;学习下PSI和PIR。 一、PSI定义 首先介绍PSI的定义&#xff0c;PSI&#xff08;隐私集合求交&#xff0c;Private Set Intersection即PSI)是安全多方计算&#x…...

C++学习0.2: RAII

引用&#xff1a; 【代码质量】RAII在C编程中的必要性_raii 在c中的重要性-CSDN博客 C RAII典型应用之lock_guard和unique_lock模板_raii lock-CSDN博客 前言: 常用的线程间同步/通信&#xff08;IPC&#xff09;方式有锁&#xff08;互斥锁、读写锁、自旋锁&#xff09;、…...

机器学习基础

了解机器学习的基本概念&#xff0c;如监督学习、无监督学习、强化学习、模型评估指标&#xff08;准确率、召回率、F1分数等&#xff09;。 机器学习&#xff08;Machine Learning&#xff0c;ML&#xff09;是人工智能&#xff08;AI&#xff09;的一个分支&#xff0c;它使计…...

传输层TCP_三次握手四次挥手的过程

三次握手四次挥手 三次握手 三次握手...

AI主流的生成式工作流框架

根据搜索结果&#xff0c;以下是一些2024年比较主流的生成式工作流框架&#xff1a; 1. LangChain&#xff1a;LangChain是一个用于构建生成式AI工作流的开发框架&#xff0c;它支持多种语言模型、工具、数据源及其他系统的集成。 2. DSPy&#xff1a;DSPy是一个生成式AI工作…...

【WRF后处理】WRF时区(UTC)需转化为北京时间(CST)!!!

目录 WRF运行时间标准注意事项-本地时区问题 输入数据&#xff1a;ERA5时间标准ERA5数据和WRF模型需要转换为北京时间&#xff01;&#xff01;&#xff01;北京时间&#xff08;CST&#xff09;与协调世界时&#xff08;UTC&#xff09;的关系转换方法 参考 WRF运行时间标准 …...

Qt 2D绘图之五:图形视图框架的结构、坐标系统和框架间的事件处理与传播

参考文章链接: Qt 2D绘图之五:图形视图框架的结构和坐标系统 Qt 2D绘图之六:图形视图框架的事件处理与传播 图形视图框架的结构 在前面讲的基本绘图中,我们可以自己绘制各种图形,并且控制它们。但是,如果需要同时绘制很多个相同或不同的图形,并且要控制它们的移动、…...

游戏引擎学习第34天

仓库:https://gitee.com/mrxiao_com/2d_game #这天内容比较多 开场介绍 游戏开发行业的基础是使用C和C编程&#xff0c;这是当今几乎所有游戏的开发标准。市面上广受欢迎的游戏&#xff0c;如《使命召唤》或《侠盗猎车手》&#xff0c;它们的底层代码和引擎几乎无一例外地采…...

深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)

本文详细介绍模型训练完成后的压缩和优化技术&#xff1a;蒸馏、剪枝、量化。 文章目录 1. 知识蒸馏 (Knowledge Distillation)基本概念工作流程关键技术类型应用场景优势与挑战优势挑战 总结 2. 权重剪枝 (Model Pruning)基本原理二分类1. 非结构化剪枝&#xff08;Unstructur…...

[在线实验]-RabbitMQ镜像的下载与部署

镜像下载 docker的rabbitmq镜像资源-CSDN文库 加载镜像 docker load --input rabbitmq.tar 给镜像打标签 这里发现镜像名为none&#xff0c;需要给镜像重命名下 docker tag [镜像id] [新镜像名称]:[新镜像标签] docker tag ebaf409ffbe2 rabbitmq:management 运行镜像…...

Netty 入门应用:结合 Redis 实现服务器通信

在上篇博客中&#xff0c;我们了解了 Netty 的基本概念和架构。本篇文章将带你深入实践&#xff0c;构建一个简单的 Netty 服务端&#xff0c;并结合 Redis 实现一个数据存取的示例。在这个场景中&#xff0c;Redis 作为缓存存储&#xff0c;Netty 作为服务端处理客户端请求。通…...

推荐 编译器c++

网页型 https://www.acgo.cn/playground C 在线工具 | 菜鸟工具 AcWing - 在线题库 ZJYYC在线测评系统 少儿编程竞赛在线学习 登录 - JOYSKID 余博士教编程_酷哥OJ_酷哥爱编程_酷哥创客AI编程 登录 - Luogu Spilopelia 软件型 DEV-c Dev C软件下载...

【新品发布】ESP32-P4开发板 —— 启明智显匠心之作,为物联网及HMI产品注入强劲动力

核心亮点&#xff1a; ESP32-P4开发板&#xff0c;是启明智显精心打造的一款高性能物联网开发板。它专为物联网项目及HMI&#xff08;人机界面&#xff09;产品而设计&#xff0c;旨在为您提供卓越的性能和稳定可靠的运行体验。 强大硬件配置&#xff1a; 双核400MHz RISC-V处…...

MeterSphere 使用脚本处理数据

1、前置/后置脚本 支持BeanShell(JSR223)、python、groovy、JavaScript脚本语言&#xff0c;推荐BeanShell(JSR223)。 在前置脚本中可以直接引用JMeter 预定义对象&#xff0c;例如&#xff1a; -- log&#xff1a;用于在脚本执行过程中打印日志 //打印“Hello World!”到info…...

如何获取谷歌新闻API密钥?

在信息获取和新闻传播领域&#xff0c;快速获取最新的新闻动态至关重要。谷歌新闻API为开发者提供了强大的工具&#xff0c;能够方便地集成全球各类新闻内容。通过使用该API&#xff0c;开发者可以实现对新闻的实时访问和管理&#xff0c;为用户提供丰富的信息服务。本文将指导…...

【全网最新】若依管理系统基于SpringBoot的前后端分离版本开发环境配置

目录 提前准备&#xff1a; 下载源代码 设置依赖 设置后台连接信息 运行后台 运行前端 安装npm依赖 启动前端 登录网页客户端 提前准备&#xff1a; 1、安装mysql 5以上就可以。 2、安装redis. 3、安装npm npm下载地址&#xff1a;https://nodejs.org/dist/v22.12…...

备赛蓝桥杯--算法题目(3)

1. 2的幂 231. 2 的幂 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool isPowerOfTwo(int n) {return n>0&&n(n&(-n));} }; 2. 3的幂 326. 3 的幂 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool isPowerOfT…...

如何解决 java.nio.charset.CoderMalfunctionError: 编码器故障错误问题?亲测有效的解决方法!

java.nio.charset.CoderMalfunctionError 是一个在 Java 中相对较少遇到的异常&#xff0c;通常与字符编码转换过程中的错误有关。当 Java 程序在进行字符编码转换时&#xff0c;遇到无法处理的字符或编码故障时&#xff0c;就会抛出该异常。 1. 问题描述 java.nio.charset.C…...

电气自动化 基于PLC控制的四路抢答器设计

摘要 本文描述了一款用三菱FX3U-48M可编程控制器设计的四路抢答器的系统构成、设计思路和功能。此抢答系统除了有基本抢答功能之外&#xff0c;还有计时、计算得分、亮灯提提示以及蜂鸣提醒功能。程序中设定答题时间&#xff0c;在主持人未按下开始抢答按钮之前&#xff0c;选…...

GA优化后的RBF神经网络

遗传算法&#xff08;Genetic Algorithm, GA&#xff09;优化后的RBF&#xff08;Radial Basis Function&#xff09;神经网络是一种结合进化算法与神经网络的混合模型&#xff0c;用于改进RBF神经网络的性能。以下是该模型的基本原理和相关公式&#xff1a; clear all close a…...

Scala:正则表达式

object test03 {//正则表达式def main(args: Array[String]): Unit {//定义一个正则表达式//1.[ab]:表示匹配一个字符&#xff0c;或者是a&#xff0c;或者是b//2.[a-z]:表示从a到z的26个字母中的任意一个//3.[A-Z]:表示从A到Z的26个字母中的任意一个//4.[0-9]:表示从0到9的10…...

vulnhub靶场之【hacksudo】1.0.1

前言 靶机&#xff1a;hacksudo 192.168.1.45 攻击&#xff1a;kali 192.168.1.16 都是虚拟机环境&#xff0c;桥接模式 主机发现 使用netdiscover或者arp-scan -l扫描 netdiscover -r 192.168.1.1/24信息收集 使用nmap扫描 因为看到2222是ssh服务&#xff0c;所以又扫…...

第4章:颜色和背景 --[CSS零基础入门]

在 CSS 中&#xff0c;颜色和背景属性是用于美化网页元素的重要工具。你可以通过多种方式定义颜色&#xff0c;并且可以设置元素的背景颜色、图像、渐变等。以下是关于如何在 CSS 中使用颜色和背景的一些关键点和示例。 1.颜色表示法 当然&#xff01;以下是使用不同颜色表示…...

Python实现PBKDF2_SHA256加密密码

加密保存格式&#xff1a;pbkdf2_sha256$迭代次数$盐$哈希值 admin可能的结果:pbkdf2_sha256$10000$yzsusUJwrGfonwZzVxlnA$vgf/OgLf5C4wtQLtfNY9d68Hhxgv8eqZ0mwfxCqqeU import os import hashlib import base64 def password_encrypt(password, saltNone, iterations1000…...

React第十三节开发中常见问题之(视图更新、事件处理)

一、视图更新有哪些方案&#xff1f; 1、对于数据变量 正常的增删改查&#xff0c;只会让数据更新&#xff0c;但是不会触发 React 视图的更新&#xff1b; 如&#xff1a; <script lang"jsx">const baseTable [{name:Andy, age: 18, id: 1},{name:Jack, a…...

PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具

PyTorch 深度学习框架简介&#xff1a;灵活、高效的 AI 开发工具 PyTorch 作为一个深度学习框架&#xff0c;以其灵活性、可扩展性和高效性广受欢迎。无论是在研究领域进行创新实验&#xff0c;还是在工业界构建生产级的深度学习模型&#xff0c;PyTorch 都能提供所需的工具和…...

Vue 3 中的计算属性(Computed Properties)详解

目录 Vue 3 中的计算属性&#xff08;Computed Properties&#xff09;详解 引言 什么是计算属性&#xff1f; 创建和使用计算属性 示例 1&#xff1a;基本用法 示例 2&#xff1a;带有 getter 和 setter 的计算属性 计算属性 vs 方法 Vue 3 中的计算属性&#xff08;Co…...

RocketMQ 过滤消息 基于tag过滤和SQL过滤

RocketMQ 过滤消息分为两种&#xff0c;一种tag过滤&#xff0c;另外一种是复杂的sql过滤。 tag过滤 首先创建producer然后启动&#xff0c;在这里创建了字符串的数组tags。字符串数组里面放置了多个字符串&#xff0c;然后去发送15条消息。 15条消息随着i的增长&#xff0c;…...

AI开发: 知识图谱的初识,学会制作知识图谱- Python 机器学习

一、知识图谱的概念 知识图谱是一个通过图结构来表示和组织知识的工具&#xff0c;它将事物、概念和它们之间的关系以图的形式呈现出来&#xff0c;图中的节点代表实体&#xff08;比如人物、地点、事件等&#xff09;&#xff0c;而边代表这些实体之间的各种关系&#xff08;…...

windows系统的环境变量(系统变量)不能编辑可能是这个原因

有些电脑从开始菜单那搜索“环境变量”后是没法编辑系统变量的&#xff0c;只能从设置里面进”环境变量“来进行编辑。 可以观察到系统环境变量即便是点击到了,但还是无法进行编辑...

各种服务器使用 yum 安装 nginx

1. 在Red Hat Enterprise Linux (RHEL) 及其衍生版本&#xff08;如CentOS, Oracle Linux, Rocky Linux, AlmaLinux&#xff09;上安装Nginx的步骤如下&#xff1a; 安装前提条件 首先&#xff0c;确保系统已安装yum-utils工具&#xff0c;这将有助于管理软件包和仓库&#x…...

基于BesselJ函数,构建AI中的卷积神经网络之新型卷积核

原创&#xff1a;daode3056(daode1212) BesselJ函数,来自微分方程&#xff1a; 它有通解有以下形式&#xff1a; 就取J0--J5的函数图像&#xff0c;如下&#xff1a; 现取J1(x),也就是红色的这支&#xff0c;作新的函数&#xff1a; 这一函数的导数与不定积分如下&#xff1a;…...

容器镜像仓库

文章目录 1、docker hub1_注册2_登录3_创建容器镜像仓库4_在本地登录Docker Hub5_上传容器镜像6_下载容器镜像 2、harbor1_获取 docker compose二进制文件2_获取harbor安装文件3_获取TLS文件4_修改配置文件5_执行预备脚本6_执行安装脚本7_验证运行情况8_访问harborUI界面9_harb…...

qtcanpool 知 08:Docking

文章目录 前言口味改造后语 前言 很久以前&#xff0c;作者用 Qt 仿照前端 UI 设计了一个 ministack&#xff08;https://gitee.com/icanpool/qtcanpool/blob/release-1.x/src/libs/qcanpool/ministack.h&#xff09; 控件&#xff0c;这个控件可以折叠。部分用户体验后&#…...