google 公司的 zxing使用非常方便
依赖

       <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version></dependency>

工具类

package com.taylor.test.common.utils;import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;/**
* 二维码生成工具类
* @author taylor
* @date 2021-02-12 15:00
*/
public class QRCodeUtil {private final static int width = 167;private final static int height = 167;private final static String format = "png";public static String generateQRCodeImage(String str) {QRCodeWriter qrCodeWriter = new QRCodeWriter();try {BitMatrix bitMatrix = qrCodeWriter.encode(str, BarcodeFormat.QR_CODE, width, height);BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(image, format, os);byte[] bytes = os.toByteArray();String encode = new BASE64Encoder().encode(bytes);return encode;} catch (Exception ex) {return null;}}
}

增加图片、log和文字

 package com.taylor.test.common.util;import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;package com.taylor.test.common.exception.BizException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;/*** @author: * @date: 2022/4/19*/public class QrCodeUtil {private static final String FONT_STR = "华文细黑"; // 字体private static final Logger log = LoggerFactory.getLogger(QrCodeUtil.class);/*** 生成二维码(无logo)* @param width 二维码宽度* @param height 二维码高度* @param margin 二维码边距(白边宽度)* @param text 二维码内容* @return BufferedImage* */public static BufferedImage generate(Integer width, Integer height, Integer margin, String text){return generateQRCode(width, height, margin, text);}/*** 生成二维码(带logo)* @param width 二维码宽度* @param height 二维码高度* @param margin 二维码边距(白边宽度)* @param text 二维码内容* @param logoPath logo图片路径* @return BufferedImage* */public static BufferedImage generate(Integer width, Integer height, Integer margin, String text, String logoPath){BufferedImage qrCode = generateQRCode(width, height, margin, text);try {addLogoImage(qrCode, logoPath);return qrCode;} catch (IOException e) {log.error(" [二维码]logo图片异常,path: " + logoPath, e);throw new BizException("二维码生成失败");}}/*** 生成二维码(带logo和文字描述)* @param size 二维码大小* @param text 二维码内容* @param logoPath logo图片路径* @param info  需要在二维码图片上添加的文字信息(并非二维码中的内容)* @return BufferedImage* */public static BufferedImage generate(Integer size, String text, String logoPath, String info){BufferedImage qrCode = generateQRCode(size, size, 3, text);try {addLogoImage(qrCode, logoPath);addText(qrCode, info, size / 25, FONT_STR);return qrCode;} catch (IOException e) {log.error(" [二维码]logo图片异常,path: " + logoPath, e);throw new BizException("二维码生成失败");}}/*** 生成二维码(带文字描述无logo)* @param size 二维码大小* @param text 二维码内容* @param info  需要在二维码图片上添加的文字信息(并非二维码中的内容)* */public static BufferedImage generate(Integer size, String text, String info){BufferedImage qrCode = generateQRCode(size, size, 3, text);addText(qrCode, info, size / 25, FONT_STR);return qrCode;}/*** 生成二维码图片* @param width  二维码宽度* @param height 二维码高度* @param margin 二维码边距(白边宽度)* @param text   二维码内容* @return BufferedImage*/private static BufferedImage generateQRCode(Integer width, Integer height, Integer margin, String text){// 定义二维码的参数HashMap hashMap = new HashMap();// 设置二维码字符编码hashMap.put(EncodeHintType.CHARACTER_SET, "UTF-8");// 设置二维码纠错等级hashMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);// 设置二维码边距hashMap.put(EncodeHintType.MARGIN, margin);try {// 开始生成二维码BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hashMap);// 创建BufferedImage将二维码图片绘制到里面, MatrixToImageWriter.toBufferedImage方法返回的BufferedImag.Type为TYPE_BYTE_BINARY,既只有黑白两种颜色BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);bufferedImage.getGraphics().drawImage(MatrixToImageWriter.toBufferedImage(bitMatrix), 0, 0, null);return bufferedImage;} catch (WriterException e) {log.error("[二维码]生成二维码失败", e);throw new BizException("二维码生成失败");}}/*** 在二维码中间添加logo图片* @param matrixImage 二维码图片 BufferedImage* @param logoPath logo图片路径* @return BufferedImage* */private static void addLogoImage(BufferedImage matrixImage, String logoPath) throws IOException {// 读取二维码图片,并构建绘图对象Graphics2D g2 = matrixImage.createGraphics();int matrixWidth = matrixImage.getWidth();int matrixHeigh = matrixImage.getHeight();// 读取Logo图片BufferedImage logo = ImageIO.read(new File(logoPath));// 开始绘制图片g2.drawImage(logo.getScaledInstance(matrixWidth/5, matrixWidth/5, Image.SCALE_SMOOTH),matrixWidth/5*2,matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5, null);//绘制BasicStroke stroke = new BasicStroke(5,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);g2.setStroke(stroke);// 设置笔画对象//指定弧度的圆角矩形RoundRectangle2D.Float round = new RoundRectangle2D.Float(matrixWidth/5*2, matrixHeigh/5*2, matrixWidth/5, matrixHeigh/5,20,20);g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 消除锯齿g2.setColor(Color.white);g2.draw(round);// 绘制圆弧矩形//设置logo 有一道灰色边框BasicStroke stroke2 = new BasicStroke(1,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND);g2.setStroke(stroke2);// 设置笔画对象RoundRectangle2D.Float round2 = new RoundRectangle2D.Float(matrixWidth/5*2+2, matrixHeigh/5*2+2, matrixWidth/5-4, matrixHeigh/5-4,20,20);g2.setColor(new Color(128,128,128));g2.draw(round2);// 绘制圆弧矩形g2.dispose();logo.flush();matrixImage.flush();}/*** 图片中添加文字* @param matrixImage 二维码图片 BufferedImage* @param text 需要添加的文字* @param fontSize 文字字体大小* @param fontStr 文字字体* */private static void addText(BufferedImage matrixImage, String text, int fontSize, String fontStr){Integer n = text.replaceAll("[\\u4e00-\\u9fa5]", "aa").length();Graphics2D g = matrixImage.createGraphics();int rectX = (matrixImage.getWidth() - fontSize * n / 2) / 2;int rectY = matrixImage.getHeight() - fontSize;Font font = new Font(fontStr, Font.PLAIN, fontSize);   //定义字体g.setBackground(Color.red);g.drawImage(matrixImage, 0, 0, null);g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON); // 消除锯齿g.setPaint(Color.black);g.setFont(font);g.drawString(text, rectX, rectY);g.dispose();matrixImage.flush();}
}

工具类之十七 基于zxing的二维码生成工具类相关推荐

  1. 基于Zxing的二维码生成和二维码扫描

    最近又在倒腾二维码,发现网上的教程都不够用,所以把之前整合的二维码Demo有拿出来重新添加些功能,这里也算是重新学习吧! 当然对于二维码,相信大家都很熟悉了.这里就不多说.本项目是基于Zxing的开源 ...

  2. 基于Excel的QR二维码生成工具——原理及算法详解(之一)

    老虎二维码(下载链接在这里)是一个基于Excel的二维码生成工具,完全使用Excel表单公式结合VBA实现,没有调用任何外部库,实现了支持中文英文混合字符以及常用微信二维码编码的自动生成,在工作表单元 ...

  3. 基于zxing的二维码扫描

    前言 现在的应用中二维码扫描已经成为一个应用必不可少的功能,现在大部分Android二维码扫描都是基于zxing和Zbar,这文章就来介绍一下基于zxing的二维码扫描.先看下效果图 虽然现在的关于二 ...

  4. 基于zxing的二维码扫描(软件界面)

    原文地址:https://www.jianshu.com/p/ee2ee7677831 前言 现在的应用中二维码扫描已经成为一个应用必不可少的功能,现在大部分Android二维码扫描都是基于zxing ...

  5. 二维码 生成工具类(文件转Base64字符串,Base64字符串转文件)

    希望我的知识榨干了能帮到你解除困难,要是没有帮助你的,问度娘和知爹 一.POM.xml依赖下载 二.工具类提供 一.POM.xml依赖下载 <!-- 生成二维码依赖 --><depe ...

  6. Java:二维码生成工具类

    java 二维码生成工具类 需要引入的maven <!--Java 生成二维码 --> <dependency><groupId>com.google.zxing& ...

  7. JAVA实现基于ZXing的二维码自动生成与图片合成

    JAVA实现基于ZXing的二维码自动生成与图片合成 近日做项目需要生成带有信息的二维码,并嵌入到一张图片中.实现思路采用Zxing生成二维码,java图形库进行图片的嵌入. 生成二维码 ZXing是 ...

  8. 微信小程序二维码生成工具,后端二维码生成工具类。

    微信小程序开发二维码生成工具类 前言 业务背景 设计思路 具体实现 接下来我们进行工具的改造 前言 或许这是你搜寻的第n篇文章来解决你项目中的问题,虽然我不能去替你完全适配你的业务需求,但是我可以给你 ...

  9. 支付宝支付 第五集:二维码生成工具

    支付宝支付 第五集:二维码生成工具 一.代码 目录结构 BufferedImageLuminanceSource.java package com.dzy.alipay.qrcode;import c ...

  10. 二维码生成工具微信小程序源码下载

    二维码生成工具 支持上传二维码logo和调整尺寸背景颜色等等 无需域名与服务器 使用教程,用HBuilder X软件打卡项目然后运行到微信小程序即可 下方是演示图: 小程序源码下载地址: (已更新)二 ...

最新文章

  1. mysql 4.0.27 下载,CentOS编译Mysql 4.0.27数据库问题解决
  2. 服务器计费系统安卓,GitHub - NWAFU/dms_client: 服务器计费系统(客户机端):用于统计租户的服务器使用情况...
  3. 三代组装软件canu学习笔记
  4. 菜鸟学SSH(十二)——Hibernate与Spring配合生成表结构
  5. 优化选项对ARM下指针赋值的影响
  6. 用神经网络分类水和乙醇
  7. Loadrunner学习笔记(三)
  8. linux 命令行工具无敌斩
  9. C#开发笔记之19-如何用C#实现优雅的Json解析(序列化/反序列化)方案?
  10. 什么是 DevSecOps?系列(一)
  11. mac 谷歌浏览器不能登录账号不能同步
  12. 心率监测仪全国产化电子元件推荐方案
  13. 掌上军营服务器信息,智慧军营之视频监控系统
  14. 全网首发:12306抢票算法大曝光?(十张图搞定)
  15. Java九阳神功-内部类
  16. Composer 源切换/composer 镜像网
  17. 气象环境监测系统有哪些组成设备
  18. sql的update语句 批量更新某字段
  19. 《30岁之前的每一天》读书笔记
  20. CAD插件学习系列教程(六) 文字自动避让工具

热门文章

  1. JAVA从入门到精通(2)
  2. 定时任务---Only no-arg methods may be annotated with @Scheduled
  3. springboot 多模块 Found multiple @SpringBootConfiguration annotated classes
  4. 三国志战略版360区S4服务器合并信息,三国志战略版S3赛季哪些大区合并
  5. MySQL架构原理(三)线程模型和文件模型
  6. ios怎么把电话号码存到android,如何将苹果手机的通讯录导入到安卓手机中?看这里...
  7. Lycoris Recoil再现!Unity实现Sakana~,代码思路解析,代码开源,Unity弹簧效果
  8. gRPC 使用自定义的 NameResolver
  9. 《情书》——岩井俊二
  10. 再谈微服务负载均衡器:Ribbon均衡器和SpringCloud自带LoadBalancer均衡器