二维码encode和decode工具类

[html] view plaincopy print?
  1. import java.awt.Color;
  2. import java.awt.Graphics2D;
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import javax.imageio.ImageIO;
  9. import jp.sourceforge.qrcode.QRCodeDecoder;
  10. import jp.sourceforge.qrcode.exception.DecodingFailedException;
  11. import com.swetake.util.Qrcode;
  12. public class TwoDimensionCode {
  13. /**
  14. * 生成二维码(QRCode)图片
  15. * @param content 存储内容
  16. * @param imgPath 图片路径
  17. */
  18. public void encoderQRCode(String content, String imgPath) {
  19. this.encoderQRCode(content, imgPath, "png", 7);
  20. }
  21. /**
  22. * 生成二维码(QRCode)图片
  23. * @param content 存储内容
  24. * @param output 输出流
  25. */
  26. public void encoderQRCode(String content, OutputStream output) {
  27. this.encoderQRCode(content, output, "png", 7);
  28. }
  29. /**
  30. * 生成二维码(QRCode)图片
  31. * @param content 存储内容
  32. * @param imgPath 图片路径
  33. * @param imgType 图片类型
  34. */
  35. public void encoderQRCode(String content, String imgPath, String imgType) {
  36. this.encoderQRCode(content, imgPath, imgType, 7);
  37. }
  38. /**
  39. * 生成二维码(QRCode)图片
  40. * @param content 存储内容
  41. * @param output 输出流
  42. * @param imgType 图片类型
  43. */
  44. public void encoderQRCode(String content, OutputStream output, String imgType) {
  45. this.encoderQRCode(content, output, imgType, 7);
  46. }
  47. /**
  48. * 生成二维码(QRCode)图片
  49. * @param content 存储内容
  50. * @param imgPath 图片路径
  51. * @param imgType 图片类型
  52. * @param size 二维码尺寸
  53. */
  54. public void encoderQRCode(String content, String imgPath, String imgType, int size) {
  55. try {
  56. BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);
  57. File imgFile = new File(imgPath);
  58. // 生成二维码QRCode图片
  59. ImageIO.write(bufImg, imgType, imgFile);
  60. } catch (Exception e) {
  61. e.printStackTrace();
  62. }
  63. }
  64. /**
  65. * 生成二维码(QRCode)图片
  66. * @param content 存储内容
  67. * @param output 输出流
  68. * @param imgType 图片类型
  69. * @param size 二维码尺寸
  70. */
  71. public void encoderQRCode(String content, OutputStream output, String imgType, int size) {
  72. try {
  73. BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);
  74. // 生成二维码QRCode图片
  75. ImageIO.write(bufImg, imgType, output);
  76. } catch (Exception e) {
  77. e.printStackTrace();
  78. }
  79. }
  80. /**
  81. * 生成二维码(QRCode)图片的公共方法
  82. * @param content 存储内容
  83. * @param imgType 图片类型
  84. * @param size 二维码尺寸
  85. * @return
  86. */
  87. private BufferedImage qRCodeCommon(String content, String imgType, int size) {
  88. BufferedImage bufImg = null;
  89. try {
  90. Qrcode qrcodeHandler = new Qrcode();
  91. // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
  92. qrcodeHandler.setQrcodeErrorCorrect('M');
  93. qrcodeHandler.setQrcodeEncodeMode('B');
  94. // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
  95. qrcodeHandler.setQrcodeVersion(size);
  96. // 获得内容的字节数组,设置编码格式
  97. byte[] contentBytes = content.getBytes("utf-8");
  98. // 图片尺寸
  99. int imgSize = 67 + 12 * (size - 1);
  100. bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
  101. Graphics2D gs = bufImg.createGraphics();
  102. // 设置背景颜色
  103. gs.setBackground(Color.WHITE);
  104. gs.clearRect(0, 0, imgSize, imgSize);
  105. // 设定图像颜色> BLACK
  106. gs.setColor(Color.BLACK);
  107. // 设置偏移量,不设置可能导致解析出错
  108. int pixoff = 2;
  109. // 输出内容> 二维码
  110. if (contentBytes.length > 0 && contentBytes.length < 800) {
  111. boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
  112. for (int i = 0; i < codeOut.length; i++) {
  113. for (int j = 0; j < codeOut.length; j++) {
  114. if (codeOut[j][i]) {
  115. gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
  116. }
  117. }
  118. }
  119. } else {
  120. throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");
  121. }
  122. gs.dispose();
  123. bufImg.flush();
  124. } catch (Exception e) {
  125. e.printStackTrace();
  126. }
  127. return bufImg;
  128. }
  129. /**
  130. * 解析二维码(QRCode)
  131. * @param imgPath 图片路径
  132. * @return
  133. */
  134. public String decoderQRCode(String imgPath) {
  135. // QRCode 二维码图片的文件
  136. File imageFile = new File(imgPath);
  137. BufferedImage bufImg = null;
  138. String content = null;
  139. try {
  140. bufImg = ImageIO.read(imageFile);
  141. QRCodeDecoder decoder = new QRCodeDecoder();
  142. content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");
  143. } catch (IOException e) {
  144. System.out.println("Error: " + e.getMessage());
  145. e.printStackTrace();
  146. } catch (DecodingFailedException dfe) {
  147. System.out.println("Error: " + dfe.getMessage());
  148. dfe.printStackTrace();
  149. }
  150. return content;
  151. }
  152. /**
  153. * 解析二维码(QRCode)
  154. * @param input 输入流
  155. * @return
  156. */
  157. public String decoderQRCode(InputStream input) {
  158. BufferedImage bufImg = null;
  159. String content = null;
  160. try {
  161. bufImg = ImageIO.read(input);
  162. QRCodeDecoder decoder = new QRCodeDecoder();
  163. content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");
  164. } catch (IOException e) {
  165. System.out.println("Error: " + e.getMessage());
  166. e.printStackTrace();
  167. } catch (DecodingFailedException dfe) {
  168. System.out.println("Error: " + dfe.getMessage());
  169. dfe.printStackTrace();
  170. }
  171. return content;
  172. }
  173. public static void main(String[] args) {
  174. String imgPath = "E:/abc.png";
  175. String encoderContent = "http://blog.csdn.net/benjamin_whx";
  176. TwoDimensionCode handler = new TwoDimensionCode();
  177. handler.encoderQRCode(encoderContent, imgPath, "png");
  178. //      try {
  179. //          OutputStream output = new FileOutputStream(imgPath);
  180. //          handler.encoderQRCode(content, output);
  181. //      } catch (Exception e) {
  182. //          e.printStackTrace();
  183. //      }
  184. System.out.println("========encoder success");
  185. String decoderContent = handler.decoderQRCode("E:/aaa.jpg");
  186. System.out.println("解析结果如下:");
  187. System.out.println(decoderContent);
  188. System.out.println("========decoder success!!!");
  189. }
  190. }

TwoDimensionCodeImage对象类

[html] view plaincopy print?
  1. import java.awt.image.BufferedImage;
  2. import jp.sourceforge.qrcode.data.QRCodeImage;
  3. public class TwoDimensionCodeImage implements QRCodeImage {
  4. BufferedImage bufImg;
  5. public TwoDimensionCodeImage(BufferedImage bufImg) {
  6. this.bufImg = bufImg;
  7. }
  8. @Override
  9. public int getHeight() {
  10. return bufImg.getHeight();
  11. }
  12. @Override
  13. public int getPixel(int x, int y) {
  14. return bufImg.getRGB(x, y);
  15. }
  16. @Override
  17. public int getWidth() {
  18. return bufImg.getWidth();
  19. }
  20. }

jar包下载http://download.csdn.net/detail/u012959829/7941481

二维码_encode与decode相关推荐

  1. js 将微信二维码转为url,qrcodeJs解析二维码,qrcode.decode is not a function报错

    前言 工作中遇到的需求:用户上传相册中选中的图片,判断这个图片里的二维码是不是微信二维码,如果是则上传到服务器:不是,则提示用户重新上传. 百度了下,qrcode.js是一个用于生成二维码的 Java ...

  2. 【OpenCV 4开发详解】QR二维码检测

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  3. python+cv2+pyzbar 二维码画框、角度

    一.效果图 二.暴力代码 import cv2 from pyzbar import pyzbarimport cv2 as cv import numpy as np import math imp ...

  4. Java生成与解析二维码

    1.下载支持二维码的jar包qrcode.jar和qrcode_swetake.jar, 其中qrcode_swetake.jar用于生成二维码,rcode.jar用于解析二维码,jar包下载地址(免 ...

  5. Java实现二维码编码与解码

    1.构建maven项目,导入对应依赖 这里引用谷歌的zxing包实现二维码的编码与解码,导入依赖如下所示 <!-- 谷歌二维码 --> <dependency><grou ...

  6. python实现二维码识别软件_OpenCV和Zbar两个Python模块实现二维码和条形码识别

    在我们的日常生活中,处处可见条形码和二维码. 在以前,我们去逛书店时,或者你现在随手拿起你身边的一本书,你肯定能看到书本的封页后面印有一排黑色线条组成的标签,也就是条形码:你去你们学校的自助机上借书还 ...

  7. Python实现PC摄像头扫描二维码,让你的电脑变身QR码识读器!

    目录 简介: 源代码: 源代码说明: 效果如下所示: 简介: 使用PC摄像机扫描二维码可以有很多应用场景,例如: 支付宝.微信支付等移动支付方式需要使用二维码进行支付,PC摄像机可以扫描这些支付二维码 ...

  8. 如何获取PDF中的二维码信息

    解析电子油票二维码内容 项目说明 需要加载的安装包 代码 项目说明 大家好,今天分享个案例,将油票中的信息提取并保存的案例. 需要加载的安装包 pip install fitz pip install ...

  9. Python二维码扫描

    模块准备 1.pyzbar pip install pyzbar 2.PIL 注意:PIL只支持Python2,所以我们需要安装Pillow pip install Pillow 代码示例 from ...

最新文章

  1. Git 高级用法小抄
  2. linux校时写入硬件,手动校正 Linux 系统时间并把时间写入硬件,系统启动时自动校正时间并把时间写入硬件。...
  3. PHP实现四种基本排序算法
  4. vue if判断_VUE学习记录2
  5. windows10系统的电脑如何设置密码?
  6. fragment中嵌套viewpager,vierpager中用fragment不显示数据
  7. hdu acm2548
  8. python实现ftp_python实现ftp(客户端)
  9. shal+php,学习笔记---PHP中几种加密算法(MD5,shal,base64_encode等)
  10. 服务器ie浏览器总是未响应,win7电脑IE浏览器总是未响应怎么办 IE浏览器无响应原因解决方法...
  11. 心理测评软件php mysql_心理测量软件_心理测评系统
  12. 如何设置HTML背景特效,HTML5之按钮背景不同动画特效设计
  13. 钕铁硼产品磁性能相对检测原理与技术
  14. vue 导航切换页面
  15. SparkSQL详解
  16. 无线网络现状与发展趋势
  17. 太空飞行计划问题 网络流24题(2/24)
  18. LeetCode T48 Rotate Image
  19. 炒股心得(每日更新)
  20. 安科瑞企业能源管控平台在轧钢行业有效地降低企业公用设施的能耗

热门文章

  1. 解决虚拟机中kylin连不上网络的问题
  2. 【安装配置】克隆方式安装Oracle数据库软件
  3. Linux之ssh-copy-id命令
  4. Java安全的发布对象
  5. 区块链100讲:Vitalik Buterin-以太坊Casper惩罚条件的最小化
  6. Centos 6.9 编译安装gcc 4.8.5
  7. Android Activity设置全屏
  8. 【转】关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题
  9. [转]解决eclipse-helios中Errors running builder Java...
  10. Grails 1.2参考文档速读(4):第3章剩余内容