热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java二维码工具类:生成二维码和解析二维码

利用google的zxing生成和解析二维码。1、下载或maven加入依赖,我这选用的是3.3.0版本,jar下载地址:http:m

利用google 的 zxing 生成和解析二维码。

1、下载或maven加入依赖,我这选用的是3.3.0版本,

jar下载地址:

http://mvnrepository.com/artifact/com.google.zxing/core/3.3.0

http://mvnrepository.com/artifact/com.google.zxing/javase/3.3.0

下载core 和 javase 这两个jar 包,导入工程,即可。


如果用maven加依赖的话


[html] view plaincopy
  1. <dependency>  
  2.             <groupId>com.google.zxinggroupId>  
  3.             <artifactId>coreartifactId>  
  4.             <version>3.3.0version>  
  5.         dependency>  
  6.         <dependency>  
  7.             <groupId>com.google.zxinggroupId>  
  8.             <artifactId>javaseartifactId>  
  9.             <version>3.3.0version>  
  10.         dependency>  






工具类&#xff1a;


[java] view plaincopy
  1. import com.google.zxing.*;  
  2. import com.google.zxing.client.j2se.BufferedImageLuminanceSource;  
  3. import com.google.zxing.client.j2se.MatrixToImageWriter;  
  4. import com.google.zxing.common.BitMatrix;  
  5. import com.google.zxing.common.HybridBinarizer;  
  6.   
  7. import javax.imageio.ImageIO;  
  8. import java.awt.image.BufferedImage;  
  9. import java.io.File;  
  10. import java.io.FileInputStream;  
  11. import java.nio.file.Path;  
  12. import java.util.HashMap;  
  13.   
  14. /** 
  15.  * 二维码工具类 
  16.  * Created by Saindy on 2017-8-26. 
  17.  */  
  18. public class QrCodeUtils {  
  19.   
  20.     static String QRCODE_IMG_PATH &#61; "d:/opt/qrCode/"// 存放二维码的文件夹  
  21.   
  22.     /** 
  23.      * 生成二维码 
  24.      * &#64;param content 要生成的二维码内容 
  25.      * &#64;param fileName 不带扩展名的文件名 
  26.      * &#64;return 返回以.png格式的文件的绝对路径 
  27.      */  
  28.     public static String createQrCode(String content, String fileName){  
  29.         String qrCodeFilePath &#61; "";  
  30.         try {  
  31.             int qrCodeWidth &#61; 300;  
  32.             int qrCodeHeight &#61; 300;  
  33.             String qrCodeFormat &#61; "png";  
  34.             HashMap hints &#61; new HashMap<>();  
  35.             hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");  
  36.             BitMatrix bitMatrix &#61; new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, qrCodeWidth, qrCodeHeight, hints);  
  37.   
  38.             BufferedImage image &#61; new BufferedImage(qrCodeWidth, qrCodeHeight, BufferedImage.TYPE_INT_RGB);  
  39.             File qrCodeFile &#61; new File(QRCODE_IMG_PATH &#43; fileName &#43;"." &#43; qrCodeFormat);  
  40.             ImageIO.write(image, qrCodeFormat, qrCodeFile);  
  41. //            MatrixToImageWriter.writeToFile(bitMatrix, qrCodeFormat, qrCodeFile);  
  42.             Path path &#61; qrCodeFile.toPath();  
  43.             MatrixToImageWriter.writeToPath(bitMatrix, qrCodeFormat, path);  
  44.             qrCodeFilePath &#61; qrCodeFile.getAbsolutePath();  
  45.         } catch (Exception e) {  
  46.             e.printStackTrace();  
  47.         }  
  48.         return qrCodeFilePath;  
  49.     }  
  50.   
  51.     /** 
  52.      * 解析二维码 
  53.      * &#64;param filePath 要进行解析的二维码图片地址 
  54.      * &#64;return 解析后得到的文字 
  55.      */  
  56.   
  57.     public static String decodeQrCode(String filePath) {  
  58.         String retStr &#61; "";  
  59.         if ("".equalsIgnoreCase(filePath) && filePath.length() &#61;&#61; 0) {  
  60.             return "图片路径为空!";  
  61.         }  
  62.         try {  
  63.             BufferedImage bufferedImage &#61; ImageIO.read(new FileInputStream(filePath));  
  64.             LuminanceSource source &#61; new BufferedImageLuminanceSource(bufferedImage);  
  65.             Binarizer binarizer &#61; new HybridBinarizer(source);  
  66.             BinaryBitmap bitmap &#61; new BinaryBitmap(binarizer);  
  67.             HashMap hintTypeObjectHashMap &#61; new HashMap<>();  
  68.             hintTypeObjectHashMap.put(DecodeHintType.CHARACTER_SET, "UTF-8");  
  69.             Result result &#61; new MultiFormatReader().decode(bitmap, hintTypeObjectHashMap);  
  70.             retStr &#61; result.getText();  
  71.         } catch (Exception e) {  
  72.             e.printStackTrace();  
  73.         }  
  74.         return retStr;  
  75.     }  
  76.   
  77.     public static void main(String[] args) {  
  78.         createQrCode("http://blog.csdn.net/Saindy5828""1610432809");  
  79.         String str &#61; decodeQrCode(QRCODE_IMG_PATH &#43; "1610432809.png");  
  80.         System.out.println("解析二维码得到的内容&#xff1a;"&#43;str);  
  81.     }  
  82. }  





生成的二维码&#xff1a;


解析得到的字符串&#xff1a;

解析二维码得到的内容&#xff1a;http://blog.csdn.net/Saindy5828


推荐阅读
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
author-avatar
O八戒有点坏O
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有