1、下载支持二维码的jar包qrcode.jar和qrcode_swetake.jar,

其中qrcode_swetake.jar用于生成二维码,rcode.jar用于解析二维码,jar包下载地址(免积分):http://download.csdn.net/detail/bakehe/9548373

2、创建J2SEImageGucas实现类,用于实现二维码图像接口QRCodeImage

 1 package org.sasc.core.twobarcode;
 2
 3 import java.awt.image.BufferedImage;
 4
 5 import jp.sourceforge.qrcode.data.QRCodeImage;
 6
 7 public class J2SEImageGucas implements QRCodeImage {
 8     BufferedImage image;
 9
10     public J2SEImageGucas(BufferedImage image) {
11         this.image = image;
12     }
13
14     public int getWidth() {
15         return image.getWidth();
16     }
17
18     public int getHeight() {
19         return image.getHeight();
20     }
21
22     public int getPixel(int x, int y) {
23         return image.getRGB(x, y);
24     }
25 }

3、编写生成二维码的方法encode和解析二维码的方法decode

  1 package org.sasc.core.twobarcode;
  2
  3 import java.awt.Color;
  4 import java.awt.Graphics2D;
  5 import java.awt.image.BufferedImage;
  6 import java.io.File;
  7 import java.io.IOException;
  8
  9 import javax.imageio.ImageIO;
 10
 11 import org.apache.log4j.Logger;
 12
 13 import com.swetake.util.Qrcode;
 14
 15 import jp.sourceforge.qrcode.QRCodeDecoder;
 16
 17 public class CreateQRCode {
 18     private static final Logger log = Logger.getLogger(CreateQRCode.class);
 19
 20     /**
 21      * 生成二维码
 22      *
 23      * @param srcValue 二维码内容
 24      * @param qrcodePicfilePath 生成路径及二维码图片名称
 25      * @return
 26      * @author muxiaoyou
 27      */
 28     private static boolean encode(String srcValue, String qrcodePicfilePath) {
 29         int MAX_DATA_LENGTH = 200;
 30         byte[] d = srcValue.getBytes();
 31         int dataLength = d.length;
 32         int imageWidth = 139;//宽度为139像素
 33         int imageHeight = imageWidth;//长度也为139像素,即此二维码为139*139像素
 34         BufferedImage bi = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
 35
 36         Graphics2D g = bi.createGraphics();
 37         g.setBackground(Color.WHITE);
 38         g.clearRect(0, 0, imageWidth, imageHeight);
 39         g.setColor(Color.BLACK);
 40
 41         if (dataLength > 0 && dataLength <= MAX_DATA_LENGTH) {
 42             //QR码的最大容量取决于选择的版本、纠错级别和编码模式(Mode:数字、字符、多字节字符等)
 43             Qrcode qrcode = new Qrcode();
 44             qrcode.setQrcodeErrorCorrect('M');//设置容错率为M
 45             qrcode.setQrcodeEncodeMode('B');//设置二维码加密模式为B
 46             qrcode.setQrcodeVersion(7);//设置二维码模式为7,取值范围为1到40,值越大所能包含的字符信息量越大
 47             boolean[][] b = qrcode.calQrcode(d);
 48             int qrcodeDataLen = b.length;
 49             for (int i = 0; i < qrcodeDataLen; i++) {
 50                 for (int j = 0; j < qrcodeDataLen; j++) {
 51                     if (b[j][i]) {
 52                         g.fillRect(j * 3 + 2, i * 3 + 2, 3, 3);
 53                     }
 54                 }
 55             }
 56             log.info("二维码生成完成!!");
 57         } else {
 58             log.info(dataLength + "大于" + MAX_DATA_LENGTH);
 59             return false;
 60         }
 61         g.dispose();
 62         bi.flush();
 63
 64         File f = new File(qrcodePicfilePath);
 65         if(!f.exists()){
 66             f.mkdirs();
 67         }
 68         String suffix = f.getName().substring(f.getName().indexOf(".") + 1, f.getName().length());
 69         try {
 70             ImageIO.write(bi, suffix, f);
 71             log.info("二维码输出成功!!");
 72         } catch (IOException ioe) {
 73             log.info("二维码生成失败" + ioe.getMessage());
 74             return false;
 75         }
 76         return true;
 77     }
 78
 79     /**
 80      * 解析二维码
 81      * @param qrcodePicfilePath 二维码图片路径
 82      * @return
 83      * @author muxiaoyou
 84      */
 85     private static String decode(String qrcodePicfilePath) {
 86         log.info("开始解析二维码!!");
 87         /* 读取二维码图像数据 */
 88         File imageFile = new File(qrcodePicfilePath);
 89         BufferedImage image = null;
 90         try {
 91             image = ImageIO.read(imageFile);
 92         } catch (IOException e) {
 93             log.info("读取二维码图片失败: " + e.getMessage());
 94             return null;
 95         }
 96         /* 解析二维码 */
 97         QRCodeDecoder decoder = new QRCodeDecoder();
 98         String decodedData = new String(decoder.decode(new J2SEImageGucas(image)));
 99         log.info("解析内容如下:" + decodedData);
100         return decodedData;
101     }
102
103     /**
104      * 程序入口
105      */
106     public static void main(String[] args) {
107         String data = "文档编号:Document-967-9301;文档名称:普通文档";
108         /**
109          * 生成二维码
110          */
111         CreateQRCode.encode(data, "D:/twoBarCodeImagessss/文档Document.JPG");
112         /**
113          * 解析二维码
114          */
115         CreateQRCode.decode("D:/twoBarCodeImagessss/文档Document.JPG");
116     }
117
118 }

转载于:https://www.cnblogs.com/cnjavahome/p/6018583.html

Java生成与解析二维码相关推荐

  1. java生成以及解析二维码

    java生成以及解析二维码 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 ...

  2. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  3. Java生成和解析二维码

    前言:曾经有做过不少微信公众号和移动网站的项目,对二维码还算有点了解,刚收到这个任务的时候就想着竟然要用二维码存文本,那就得先考究一下这小小的二维码到底能存多少的东西了. 需求:使用二维码存放文本(x ...

  4. java生成和解析二维码实战——QRCode

    直接上代码,以下程序可直接运行: package qrcode;import java.awt.Color; import java.awt.Graphics2D; import java.awt.i ...

  5. java生成与解析二维码 支持插入图片与文字

    1.依赖: <!-- https://mvnrepository.com/artifact/com.google.zxing/core --><dependency><g ...

  6. java 生成、解析二维码并在二维码中添加样式

    https://blog.csdn.net/yxj13935213026/article/details/81017902

  7. Java实现生成和解析二维码

    Java实现生成和解析二维码 文章目录 Java实现生成和解析二维码 一.建立项目 二.创建工具类 三.创建启动类 一.建立项目 首先需要创建一个普通的 Maven 项目,在这里我用的是 google ...

  8. java利用zxing来生成和解析二维码,支持中文

    java在二维码的生成和解析上,网上有些人说如果要解析中文,得去修改工具包的Encoder类中的 static final String DEFAULT_BYTE_MODE_ENCODING = &q ...

  9. 使用zxing生成与解析二维码

    随着二维码的普及,二维码在生活中的使用使用的场景也越来越来多,本文章就来介绍使用zxing来生成与解析二维码.生成二维码的开源项目很多,选择zxing则是因为其出自Google并且长期有人进行维护,值 ...

最新文章

  1. 本地如何使用phpstudy环境搭建多站点
  2. 【kudu pk parquet】TPC-H Query2对比解析
  3. Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介、使用方法、经典案例之详细攻略
  4. 使用idea编写SparkStreaming消费kafka中的数据,并对数据进行某一指标的处理【小案例】(五)
  5. sap.m.SplitApp
  6. arcgis出界址点成果表_界址点成果表打印
  7. ssis sql_如何在SSIS中使用SQL随机数
  8. 【Java 面向对象】基础、Java程序的内存划分、嵌套类(内部类、静态嵌套类)、局部类、接口的升级问题(默认方法、静态方法)、instanceof
  9. 牛客练习赛21:B. 黑妹的游戏II(博弈DP)
  10. 10款非常棒的开源论坛系统推荐
  11. JS 页面跳转,参数的传递
  12. 一文搞懂步进电机特性、原理及驱动器设计
  13. 算法基本知识,入门必备
  14. 学前端好还是后端好?
  15. 蒙特卡罗(洛)方法及其在布丰投针试验中的应用(一)
  16. 网络诊断提示:远程计算机或设备将不接受连接 (根治 )
  17. kali安装openvas全过程
  18. java 农历_Java 农历算法
  19. nodes are available: 1 node(s) had taints that the pod didn‘t tolerate
  20. Ubuntu20.04+gdb/vscode调试ROS(VINS-Mono)程序

热门文章

  1. ftp服务器连接数修改,ftp服务器连接数设置
  2. 量子侦探社之“寻猫记”
  3. 计算机使用的一些技巧
  4. 如何解决‘CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate’错误
  5. 什么是量子计算机 什么原理,量子计算机原理是什么?
  6. BZOJ2069 POI2004ZAW(最短路)
  7. 金刚菩提子开裂自动修复此计算机,金刚菩提子裂了怎么办 教你这些修复方法...
  8. 全国数字金融与量化金融案例大赛经验分享
  9. 让linux识别html,8 款浏览器对 HTML5 支持评测
  10. 足球相关的英文专业术语(持续更新中...Ctrl+F可直接进行搜索)