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

【Mac版】Java生成二维码

软件版本

IntelliJ IDEA:2023.2
JDK:17
Tomcat:10.1.11
Maven:3.9.3

技术栈

  • servlet
  • 谷歌的:zxing
    • 生成普通的黑白二维码
    • 在二维码中间添加一个小图标
  • github开源项目:qrcode
    • qrcode开源项目的内部是基于zxing实现的,可以让二维码更加酷炫

项目结构

在这里插入图片描述

环境搭建

创建Empty Project

image.png
在这里插入图片描述

在这里插入图片描述

设置SDK

在这里插入图片描述

在这里插入图片描述

设置Maven

在这里插入图片描述

在这里插入图片描述

注意:自己安装的maven中settings配置文件中已经配置了本地仓库的位置:
在这里插入图片描述

在这里插入图片描述

添加web支持

右键项目:
在这里插入图片描述

添加框架支持:

在这里插入图片描述

注意:如果File菜单中没有上图的“Add Framework Support…”怎么办?
image.png
image.png
这样File菜单中就有了。
继续添加框架支持:web4.0,不创建web.xml文件
image.png

pom.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.powernode</groupId><artifactId>qrcode</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.0.0</version><scope>provided</scope></dependency></dependencies><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>
  • 打包方式:war
  • 引入servlet依赖

确认web的根是否正确(重点)

在这里插入图片描述

设置tomcat并部署应用

在这里插入图片描述

image.png

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

这个地方可能有些小伙伴还没有安装tomcat,mac推荐使用homebrew安装tomcat
在这里插入图片描述

然后这个Configure这里,需要我们自己去找:
在这里插入图片描述
在终端输入以获取tomcat路径:

brew ls tomcat

在这里插入图片描述
在这里插入图片描述
然后依次按照所给tomcat路径去找到自己的tomcat!

在这里插入图片描述

启动tomcat并访问

在这里插入图片描述

image.png

zxing相关依赖

<!--zxing依赖-->
<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.1.0</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.1.0</version>
</dependency><!--commons-lang依赖-->
<dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version>
</dependency>

zxing常用API

EncodeHintType(编码提示类型)

EncodeHintType是用来设置二维码编码时的一些额外参数的枚举类型,常用枚举值如下:

  • ERROR_CORRECTION
    • 误差校正级别。对于黑白二维码,可选值为L(7%)、M(15%)、Q(25%)、H(30%),表示二维码允许破损的最大容错率。在二维码出现破损时,根据设置的容错率级别,可以尝试修复二维码中的一些数据。
    • 二维码在生成过程中,可能会出现一些损坏或者缺失的情况,例如打印时墨水耗尽、图像压缩、摄像头拍摄角度不对等。这些问题可能导致二维码无法完全识别,或者识别出来的数据不准确,而误差校正码就是为了解决这些问题而产生的。
    • 例如,选择L级别的容错率,相当于允许在二维码的整体颜色区域中,最多可有约7%的坏像素点;而选择H级别的容错率时,最多可有约30%的坏像素点。
    • 注意:误差校正级别的具体值需要通过ErrorCorrectionLevel的枚举值来获取。
  • CHARACTER_SET
    • 编码字符集。可以设置使用的字符编码,例如utf-8、gb2312等等。
  • MARGIN
    • 二维码的空白区域大小。可以设置二维码周围的留白大小,以便于在不同的嵌入场景中使用二维码。

MultiFormatWriter(多格式写入程序)

MultiFormatWriter是一个便捷的二维码生成类,可以根据传入的BarcodeFormat参数,生成对应类型的二维码。
MultiFormatWriter封装了一系列的二维码生成方法,可以生成多种格式的二维码,包括QR Code、Aztec Code、PDF417、Data Matrix等。

BarcodeFormat(码格式)

BarcodeFormat是枚举类,通过它来制定二维码格式:

  • QR Code :QR Code是最常见的二维码格式之一,广泛应用于商品包装、票务、扫码支付等领域。QR Code矩阵有黑白两种颜色,其中黑色部分表示信息的编码,白色部分则用于衬托和辨识。
  • Aztec Code:Aztec Code是一种高密度、可靠性很高的二维码格式。相比于其他二维码格式,它具有更低的容错率、更小的尺寸和更高的解码效率。因此,它适合用于储存一些核心信息,例如个人信息、证件信息、账户密码等。
  • PDF417:是一种可以储存大量信息的二维码格式,它具有数据密度高、可靠性强等优点,可以应用于许多场景,例如航空机票,运输和配送标签,法律文件等。
  • Data Matrix:是一种小巧的二维码格式,它的编码方式类似于QR Code,但是其可靠性、识别率、扫描速度和牢固度都比QR Code更优秀。由于尺寸较小、可靠性较高,因此Data Matrix适合嵌入简单的产品标签、医疗图像、检测数据等领域。

BitMatrix(位矩阵)

BitMatrix是ZXing库中表示二维码矩阵的数据结构,它是由0和1构成的二维数组,用于存储二维码的编码信息。在二维码生成过程中,我们通过对BitMatrix对象的构建和操作,最终生成一个可被扫描解码的二维码图像。

BitMatrix实际上是一个紧凑型的布尔型二维数组,往往只需要占用一个字节即可表示8位二进制。在使用BitMatrix时,我们可以通过其不同的方法,例如get()set()等,来获取、设置矩阵中每个位置的值。

在ZXing中,BitMatrix常用于将编码后的信息转化为矩阵形式,并进行图像的生成和输出。在使用ZXing生成二维码时,我们首先需要使用MultiFormatWriter.encode()方法来生成一个BitMatrix;然后,在对BitMatrix进行各种处理和操作后,就可以在UI中显示和输出二维码。

总的来说,BitMatrix是ZXing库中非常重要的数据结构之一,它负责存储和处理生成二维码图像所需的二进制信息,是实现二维码生成功能的关键。

BitMatrix常用API:

  • getHeight():获取矩阵高度
  • getWidth():获取矩阵宽度
  • get(x, y):根据x,y的坐标获取矩阵中该坐标的值。结果是true(黑色)或者false(白色)。

生成普通黑白二维码

前端代码:

<%--Created by IntelliJ IDEA.User: suyueDate: 2024/5/30Time: 16:21To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>使用JAVA语言生成二维码</title></head><body><h1>使用Google的zxing二维码生成工具生成普通的黑白二维码</h1><hr />请输入文本内容:<input type="text" id="url"/><button onclick="generateQRcode()">生成二维码</button><br/><hr /><img src="" id="qrcodeimg" /><script>function generateQRcode() {let url = document.getElementById("url").valuelet QRCode = document.getElementById("qrcodeimg");QRCode.src = "/QRcode/generate?url=" + url;}</script></body>
</html>

后端代码:

package com.powernode.qrcode.servlets;import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;@WebServlet("/generate")
public class GenerateQRcode extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {try {// 准备一个Map集合,用来存储二维码图片的相关属性Map map = new HashMap();// 设置误差校验级别map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 设置字符编码(因为文本内容要转换成二维码,需要指定转换时采用的字符集)map.put(EncodeHintType.CHARACTER_SET, "utf-8");// 设置二维码的外边距map.put(EncodeHintType.MARGIN, 1);// 获取要生成二维码的文本内容String url = request.getParameter("url");// 创建MultiFormatWriter对象MultiFormatWriter writer = new MultiFormatWriter();// 传入:内容、码的格式、宽度、高度、二维码参数。返回位矩阵对象。BitMatrix bitMatrix = writer.encode(url, BarcodeFormat.QR_CODE, 300, 300, map);// 获取位矩阵的宽度和高度int width = bitMatrix.getWidth();int height = bitMatrix.getHeight();// 创建BufferedImage对象BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 遍历位矩阵for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {// 0xFF000000 黑色// 0xFFFFFFFF 白色image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);}}// 响应ServletOutputStream out = response.getOutputStream();ImageIO.write(image, "png", out);out.flush();out.close();} catch(Exception e){e.printStackTrace();}}
}

运行效果:
在这里插入图片描述

生成一个带logo的黑白二维码

<%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<!doctype html>
<html>
<head><title>生成带有logo的黑白二维码</title><meta charset="UTF-8">
</head>
<body>
<form action="/myqrcode/generateWithLogo" method="post" enctype="multipart/form-data">请输入文本内容:<input type="text" name="url"><br>请选择图片:<input type="file" name="logo"><br><input type="submit" value="生成带有logo的二维码"/>
</form>
</body>
</html>
package com.powernode.qrcode.servlets;import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;@WebServlet("/generateWithLogo")
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, maxFileSize = 1024 * 1024 * 10, maxRequestSize = 1024 * 1024 * 100)
public class GenerateQrCodeWithLogo extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try {// 准备一个Map集合,用来存放二维码的属性Map map = new HashMap();map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);map.put(EncodeHintType.CHARACTER_SET, "UTF-8");map.put(EncodeHintType.MARGIN, 1);// 获取文本内容String url = request.getParameter("url");// 创建zxing核心对象MultiFormatWriter writer = new MultiFormatWriter();BitMatrix bitMatrix = writer.encode(url, BarcodeFormat.QR_CODE, 300, 300, map);int width = bitMatrix.getWidth();int height = bitMatrix.getHeight();// 生成二维码BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {bufferedImage.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);}}// 给二维码添加logo// 第一部分:将logo缩放。// 获取上传的logo Part对象Part logo = request.getPart("logo");// 通过Part对象获取输入流InputStream inputStream = logo.getInputStream();// 通过ImageIO的read方法,从输入流中读取,从而获得logo图片Image logoImage = ImageIO.read(inputStream);// 获取logo图片的宽度int logoWidth = logoImage.getWidth(null);// 获取logo图片的高度int logoHeight = logoImage.getHeight(null);// 如果logo的宽度或者高度大于100,则重新赋值100if (logoWidth > 60) {logoWidth = 60;}if (logoHeight > 60) {logoHeight = 60;}// 使用平滑缩放算法对原logo图像进行缩放得到一个全新的图像。Image scaledLogo = logoImage.getScaledInstance(logoWidth, logoHeight, Image.SCALE_SMOOTH);// 第二部分:将缩放后的logo画到黑白二维码上// 获取2D画笔Graphics2D graphics2D = bufferedImage.createGraphics();// 开始画的x和y坐标int x = (300 - logoWidth) / 2;int y = (300 - logoHeight) / 2;// 将缩放后的logo画上去graphics2D.drawImage(scaledLogo, x, y, null);// 创建一个具有指定位置、宽度、高度和圆角半径的圆角矩形。这个圆角矩形是用来绘制边框的。Shape shape = new RoundRectangle2D.Float(x, y, logoWidth, logoHeight, 10, 10);// 使用一个宽度为4像素的基本笔触graphics2D.setStroke(new BasicStroke(4f));// 给logo画圆角矩形graphics2D.draw(shape);// 释放画笔graphics2D.dispose();// 响应ImageIO.write(bufferedImage, "png", response.getOutputStream());} catch (Exception e) {e.printStackTrace();}}}

运行效果:
在这里插入图片描述

使用github开源项目qrcode

<dependency><groupId>com.github.liuyueyi.media</groupId><artifactId>qrcode-plugin</artifactId><version>2.5.2</version>
</dependency>

生成黑白二维码

String url = request.getParameter("url");
BufferedImage image = QrCodeGenWrapper.of(url).asBufferedImage();
ImageIO.write(image, "png", response.getOutputStream());

生成带有logo的二维码

String url = request.getParameter("url");BufferedImage image = QrCodeGenWrapper.of(url).setLogo(request.getPart("logo").getInputStream()).setLogoRate(7) // 设置 logo 图片与二维码之间的比例。在这个例子中,它设置为 7,表示 logo 的宽度等于二维码的 1/7。.setLogoStyle(QrCodeOptions.LogoStyle.ROUND) // 设置 logo 图片的样式。设置为 ROUND,表示将 logo 的边框形状设置为圆形。.asBufferedImage();ImageIO.write(image, "png", response.getOutputStream());

生成彩色二维码

String url = request.getParameter("url");BufferedImage image = QrCodeGenWrapper.of(url).setDrawPreColor(Color.BLUE).asBufferedImage();ImageIO.write(image, "png", response.getOutputStream());

生成背景图二维码

String url = request.getParameter("url");BufferedImage image = QrCodeGenWrapper.of(url).setBgImg(request.getPart("logo").getInputStream()).setBgOpacity(0.7F).asBufferedImage();ImageIO.write(image, "png", response.getOutputStream());

特殊形状二维码

String url = request.getParameter("url");BufferedImage image = QrCodeGenWrapper.of(url).setDrawEnableScale(true) // 启用二维码绘制时的缩放功能.setDrawStyle(QrCodeOptions.DrawStyle.DIAMOND) // 指定绘制样式.asBufferedImage();ImageIO.write(image, "png", response.getOutputStream());

图片填充二维码

String url = request.getParameter("url");BufferedImage image = QrCodeGenWrapper.of(url).setErrorCorrection(ErrorCorrectionLevel.H) // 设置二维码的错误纠正级别.setDrawStyle(QrCodeOptions.DrawStyle.IMAGE) // 绘制样式采用图片填充.addImg(1, 1, request.getPart("logo").getInputStream()) // 添加图片.asBufferedImage();ImageIO.write(image, "png", response.getOutputStream());

生成gif动图二维码

String url = request.getParameter("url");BufferedImage image = QrCodeGenWrapper.of(url).setW(500).setH(500).setBgImg(request.getPart("logo").getInputStream()).setBgOpacity(0.6f).setPicType("gif").asBufferedImage();ImageIO.write(image, "gif", response.getOutputStream());

相关文章:

【Mac版】Java生成二维码

软件版本 IntelliJ IDEA&#xff1a;2023.2 JDK&#xff1a;17 Tomcat&#xff1a;10.1.11 Maven&#xff1a;3.9.3 技术栈 servlet谷歌的&#xff1a;zxing 生成普通的黑白二维码在二维码中间添加一个小图标 github开源项目&#xff1a;qrcode qrcode开源项目的内部是基于z…...

ROS2自定义服务接口

ROS2自定义服务接口 在src/village_interface 下构建srv文件夹 src/village_interface/srv 下新建一个BorrowMoney.srv 遵循大小写编程规范 # 客户端请求 string name uint32 money # 中间这三个横杠很重要 不能删掉 --- # 服务端响应 bool success uint32 money接口编译 修改…...

linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除

linux服务器长期使用宝塔自带计划任务&#xff0c;计划任务执行记录占用服务器空间过大&#xff0c;导致服务器根目录爆满&#xff0c;需要长期排查并删除 /www/server/cron 占用空间过大问题处理 /www/server/cron是什么内容&#xff1f;/www/server/cron是否可以删除&#xf…...

C++青少年简明教程:break语句、continue语句

C青少年简明教程&#xff1a;break语句、continue语句 break语句 只能用在switch语句和循环语句&#xff08;for循环、while循环和do-while循环&#xff09;中。作用&#xff1a;跳出switch语句或提前终止循环。 break语句的基本语法如下&#xff1a; break; break语句的示例…...

MySQL实战行转列(或称为PIVOT)实战sales的表记录了不同产品在不同月份的销售情况,进行输出

有一个sales的表&#xff0c;它记录了不同产品在不同月份的销售情况&#xff1a; productJanuaryFebruaryMarchProduct AJanuary10Product AFebruary20Product BJanuary5Product BFebruary15Product CJanuary8Product CFebruary12 客户需求展示为如下的样子&#xff1a; pro…...

牛客NC164 最长上升子序列(二)【困难 贪心+二分 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/4af96fa010c44638a7e112abf65f7237 思路 贪心二分 所谓贪心&#xff0c;就是往死里贪&#xff0c;所以对于最大上升子序列&#xff0c;结尾元素越小&#xff0c;越有利于后面接上其他的数&#xff0c;也就可能变…...

电子烟开发【恒压、恒有效算法】

恒压算法 pwm是通过软件模拟的 pwm满值运行是250全占空比 #define D_TARGET_AVERAGE_VOLTAGE 3500 //R_ADC1_Vout &#xff1a;发热丝两端AD值 //R_ADC_FVR &#xff1a;电池电压AD值 //FVR_VOLTAGE &#xff1a;电池AD参考电压 满电值AD //R_Smk1Duty &#xff1a;最后…...

基于Open3D的点云处理22-非阻塞可视化/动态可视化

官网测试用例:examples/python/visualization/non_blocking_visualization.py 非阻塞可视化,即实时更新点云数据; 如下,动态可视化ICP的匹配过程: import open3d as o3d import numpy as npif __name__ == "__main__":o3d.utility.set_verbosity_level(o3d.ut…...

C++面试题其一

C和C的区别 C和C都是广泛使用的编程语言&#xff0c;但它们有显著的区别&#xff1a; 语言范式&#xff1a; C&#xff1a;是一种过程化编程语言&#xff0c;强调过程和函数的使用。C&#xff1a;是一种多范式编程语言&#xff0c;支持面向对象编程、泛型编程和过程化编程。 …...

CentOS7某天的samba服务搭建操作记录(还没成功)

#CentOS7 yum软件仓库阿里云 samba服务器配置失败 sensors成功了 (花了200元组装H61测试机&#xff0c;75元的主板只有一块能用&#xff0c;垃圾板但又不完全能用&#xff09; 2024.5月的某天记录如下&#xff1a; https://blog.csdn.net/dszgf5717/article/details/53732182 …...

Qt Demo:基于TCP协议的视频传输Demo

目录 1.设计思路 2.Pro文件配置 3.头文件引入 4.界面设计 5.初始化设备函数 6.发起视频链接函数 7.初始化定时器模块函数 8.TCP链接模块函数 9.处理接收的数据线程函数 10.实现功能展示 设计思路 基于TCP协议的视频传输Demo&#xff0c;设计要实现的功能主要是TCP传输还有视频&…...

内存管理【C++】

内存分布 C中的内存区域主要有以下5种 栈&#xff08;堆栈&#xff09;&#xff1a;存放非静态局部变量/函数参数/函数返回值等等&#xff0c;栈是向下增长的【地址越高越先被使用】。栈区内存的开辟和销毁由系统自动执行 堆&#xff1a;用于程序运行时动态内存分配&#xff…...

D3D 顶点格式学习

之前D3D画三角形的代码中有这一句&#xff0c; device.VertexFormat CustomVertex.TransformedColored.Format; 这是设置顶点格式&#xff1b; 画出的三角形如下&#xff0c; 顶点格式是描述一个三维模型的顶点信息的格式&#xff1b;可以包含以下内容&#xff0c; 位置…...

gmssl vs2010编译

1、虚拟机win10 x64&#xff0c;离线安装vs2010和2010sp1补丁&#xff1b; 2、安装ActivePerl_v5.28.1.0000和nasm-2.16.03-installer-x64均是默认完整安装&#xff1b; nasm官网下载&#xff1a; Index of /pub/nasm/releasebuilds/2.16.03/win64https://www.nasm.us/pub/nas…...

容器化部署gitlab、jenkins,jenkins应用示例

一、容器化部署docker和docker conpose安装 Docker&Docker-compose的安装及部署_docker 20 使用什么版本docker-compose-CSDN博客 1.docker 安装脚本 cat >01_docker.sh<<EOF #!/bin/bash yum remove docker \docker-client \docker-client-latest \docker-co…...

基于STM32的轻量级Web服务器设计

文章目录 一、前言1.1 开发背景1.2 实现的功能1.3 硬件模块组成1.4 ENC28J60网卡介绍1.5 UIP协议栈【1】目标与特点【2】核心组件【3】应用与优势 1.6 添加UIP协议栈实现创建WEB服务器步骤1.7 ENC28J60添加UIP协议栈实现创建WEB客户端1.8 ENC28J60移植UIP协议并编写服务器测试示…...

用r语言处理 Excel数据当中的缺失值方法

以下是使用 R 编程语言处理 Excel 缺失数据的一些常见方法示例代码&#xff1a;&#xff08;无需循环&#xff09; 读取包含缺失数据的 Excel 文件 data <- read.csv(“your_file.csv”) 查看数据中是否有缺失值 sum(is.na(data)) 用平均值填充缺失值 data c o l u m …...

AWS 高防和阿里云高防深度对比

随着网络攻击的不断增加&#xff0c;企业对于网络安全的需求也越来越高。在这种情况下&#xff0c;高防护服务成为了企业网络安全的重要组成部分。AWS和阿里云作为全球领先的云计算服务提供商&#xff0c;都提供了高防护服务&#xff0c;但它们之间存在着一些差异。我们九河云一…...

ctfshow web 月饼杯II

web签到 <?php //Author:H3h3QAQ include "flag.php"; highlight_file(__FILE__); error_reporting(0); if (isset($_GET["YBB"])) {if (hash("md5", $_GET["YBB"]) $_GET["YBB"]) {echo "小伙子不错嘛&#xff…...

「前端+鸿蒙」核心技术HTML5+CSS3(二)

1、开发者文档 开发者文档通常由浏览器厂商或技术社区提供,包含有关Web技术(如HTML、CSS、JavaScript)的详细信息,API文档,以及最佳实践。例如,MDN Web Docs是一个广泛认可的开发者资源。 2、块级元素与行列元素 块级元素:在页面上占据整行的元素,如<div>、<…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...

python打卡第47天

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图&#xff0c;展示模…...