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

天津网站建设代理商专业的南昌网站建设

天津网站建设代理商,专业的南昌网站建设,楼市最新消息2023年房价走势,合肥做淘宝网站推广软件版本 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…软件版本 IntelliJ IDEA2023.2 JDK17 Tomcat10.1.11 Maven3.9.3 技术栈 servlet谷歌的zxing 生成普通的黑白二维码在二维码中间添加一个小图标 github开源项目qrcode qrcode开源项目的内部是基于zxing实现的可以让二维码更加酷炫 项目结构 环境搭建 创建Empty Project 设置SDK 设置Maven 注意自己安装的maven中settings配置文件中已经配置了本地仓库的位置 添加web支持 右键项目 添加框架支持 注意如果File菜单中没有上图的“Add Framework Support…”怎么办 这样File菜单中就有了。 继续添加框架支持web4.0不创建web.xml文件 pom.xml文件配置 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.powernode/groupIdartifactIdqrcode/artifactIdversion1.0-SNAPSHOT/versionpackagingwar/packagingdependenciesdependencygroupIdjakarta.servlet/groupIdartifactIdjakarta.servlet-api/artifactIdversion6.0.0/versionscopeprovided/scope/dependency/dependenciespropertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/properties/project打包方式war引入servlet依赖 确认web的根是否正确重点 设置tomcat并部署应用 这个地方可能有些小伙伴还没有安装tomcatmac推荐使用homebrew安装tomcat 然后这个Configure这里需要我们自己去找: 在终端输入以获取tomcat路径 brew ls tomcat然后依次按照所给tomcat路径去找到自己的tomcat 启动tomcat并访问 zxing相关依赖 !--zxing依赖-- dependencygroupIdcom.google.zxing/groupIdartifactIdcore/artifactIdversion3.1.0/version /dependency dependencygroupIdcom.google.zxing/groupIdartifactIdjavase/artifactIdversion3.1.0/version /dependency!--commons-lang依赖-- dependencygroupIdcommons-lang/groupIdartifactIdcommons-lang/artifactIdversion2.6/version /dependencyzxing常用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 CodeAztec 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)根据xy的坐标获取矩阵中该坐标的值。结果是true黑色或者false白色。 生成普通黑白二维码 前端代码 %--Created by IntelliJ IDEA.User: suyueDate: 2024/5/30Time: 16:21To change this template use File | Settings | File Templates. --% % page contentTypetext/html;charsetUTF-8 languagejava % htmlheadtitle使用JAVA语言生成二维码/title/headbodyh1使用Google的zxing二维码生成工具生成普通的黑白二维码/h1hr /请输入文本内容input typetext idurl/button onclickgenerateQRcode()生成二维码/buttonbr/hr /img src idqrcodeimg /scriptfunction 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 contentTypetext/html;charsetUTF-8 pageEncodingUTF-8 % !doctype html html headtitle生成带有logo的黑白二维码/titlemeta charsetUTF-8 /head body form action/myqrcode/generateWithLogo methodpost enctypemultipart/form-data请输入文本内容input typetext nameurlbr请选择图片input typefile namelogobrinput typesubmit value生成带有logo的二维码/ /form /body /htmlpackage 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 dependencygroupIdcom.github.liuyueyi.media/groupIdartifactIdqrcode-plugin/artifactIdversion2.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());
http://www.hkea.cn/news/14282234/

相关文章:

  • joomla 网站 html 空免费代理招商网
  • 如何做医疗网站的专题页网站申请域名流程
  • 网站开发属于购销合同浙江建设职业技术学院官网
  • 网站建设价格标准渠道网站建设seo优化培训
  • 单个页面的网站网络销售怎么做才能做好
  • 目前做美术的网站以及app分销系统
  • 网站备案个人使用网站建设影音先锋网址
  • 黑龙江省建设厅网站的电话wordpress无法搜索插件
  • 网站怎么注销备案号深圳专业企业网站建设模板
  • 沈阳做网站怎样收费wordpress无法创建目录安装失败
  • 网站的缩略图中小企业 网站建设
  • 岑溪网站开发合肥网站推广公司
  • 公司门户网站怎么做福州网站营销
  • 车辆对比那个网站做的好seo是什么级别
  • 如何自己买域做网站黑龙江营商监督建设局网站
  • 网站建设方案书模版会计培训机构排名
  • 网站模板哪里好国内能用的搜索引擎
  • 网站首页设计报告上海城乡建设部网站
  • 安徽智能网站建设哪里有id 连续 wordpress
  • 宜昌市住房和城乡建设局网站天河区门户网站官网
  • 网站源码在线提取成都网站运营公司
  • 网站建设用什么工具网站页眉设计
  • 从化网站设计网站建设一定要备案吗
  • 北海建设厅网站wordpress4.9中文版
  • 成都网站建设 Vr功能 卓 公司wordpress性能优化插件
  • 海南省住房和城乡建设厅网站首页营销网络和网络营销的区别
  • 佛山网站建设外贸做音乐网站需要版权么
  • 网站制作技术人员东莞百度推广优化公司
  • 墙绘网站建设企业网站 建设公司
  • python网站开发优缺点北京婚恋网站哪家最好