Java实现二维码QRCode的编码和解码与示例解析

Java实现二维码QRCode的编码和解码

涉及到的一些主要类库,方便大家下载:

编码lib:Qrcode_swetake.jar   (官网介绍-- http://www.swetake.com/qr/index-e.html)

解码lib:qrcode.jar                 (官网介绍-- http://sourceforge.jp/projects/qrcode/)

【一】、编码:

Java代码QRCodeEncoderHandler.java

package michael.qrcode; 

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File; 

import javax.imageio.ImageIO; 

import com.swetake.util.Qrcode; 

/**
 * 二维码生成器
 * @blog http://sjsky.iteye.com
 * @author Michael
 */
public class QRCodeEncoderHandler { 

 /**
 * 生成二维码(QRCode)图片
 * @param content
 * @param imgPath
 */
 public void encoderQRCode(String content, String imgPath) {
 try { 

 Qrcode qrcodeHandler = new Qrcode();
 qrcodeHandler.setQrcodeErrorCorrect('M');
 qrcodeHandler.setQrcodeEncodeMode('B');
 qrcodeHandler.setQrcodeVersion(7); 

 System.out.println(content);
 byte[] contentBytes = content.getBytes("gb2312"); 

 BufferedImage bufImg = new BufferedImage(140, 140,
  BufferedImage.TYPE_INT_RGB); 

 Graphics2D gs = bufImg.createGraphics(); 

 gs.setBackground(Color.WHITE);
 gs.clearRect(0, 0, 140, 140); 

 // 设定图像颜色> BLACK
 gs.setColor(Color.BLACK); 

 // 设置偏移量 不设置可能导致解析出错
 int pixoff = 2;
 // 输出内容> 二维码
 if (contentBytes.length > 0 && contentBytes.length < 120) {
 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
 for (int i = 0; i < codeOut.length; i++) {
  for (int j = 0; j < codeOut.length; j++) {
  if (codeOut[j][i]) {
  gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
  }
  }
 }
 } else {
 System.err.println("QRCode content bytes length = "
  + contentBytes.length + " not in [ 0,120 ]. ");
 } 

 gs.dispose();
 bufImg.flush(); 

 File imgFile = new File(imgPath); 

 // 生成二维码QRCode图片
 ImageIO.write(bufImg, "png", imgFile); 

 } catch (Exception e) {
 e.printStackTrace();
 } 

 } 

 /**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
 String imgPath = "D:/test/twocode/Michael_QRCode.png"; 

 String content = "Hello 大大、小小,welcome to QRCode!"
 + "\nMyblog [ http://sjsky.iteye.com ]"
 + "\nEMail [ sjsky007@gmail.com ]" + "\nTwitter [ @suncto ]"; 

 QRCodeEncoderHandler handler = new QRCodeEncoderHandler();
 handler.encoderQRCode(content, imgPath); 

 System.out.println("encoder QRcode success");
 }
}

运行后生成的二维码图片如下:

此时就可用手机的二维码扫描软件(本人用的:android 快拍二维码 )来测试下,识别成功的截图如下:

喜欢的朋友可以下载后试一试,做一些名片或者自己喜欢的东西。当然Java也可以对二维码图片解码,具体看下面关于解码的内容。

【二】、解码:

Java代码QRCodeDecoderHandler.java

package michael.qrcode; 

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException; 

import javax.imageio.ImageIO; 

import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import jp.sourceforge.qrcode.exception.DecodingFailedException; 

/**
 * @blog http://sjsky.iteye.com
 * @author Michael
 */
public class QRCodeDecoderHandler { 

 /**
 * 解码二维码
 * @param imgPath
 * @return String
 */
 public String decoderQRCode(String imgPath) { 

 // QRCode 二维码图片的文件
 File imageFile = new File(imgPath); 

 BufferedImage bufImg = null;
 String decodedData = null;
 try {
 bufImg = ImageIO.read(imageFile); 

 QRCodeDecoder decoder = new QRCodeDecoder();
 decodedData = new String(decoder.decode(new J2SEImage(bufImg))); 

 // try {
 // System.out.println(new String(decodedData.getBytes("gb2312"),
 // "gb2312"));
 // } catch (Exception e) {
 // // TODO: handle exception
 // }
 } catch (IOException e) {
 System.out.println("Error: " + e.getMessage());
 e.printStackTrace();
 } catch (DecodingFailedException dfe) {
 System.out.println("Error: " + dfe.getMessage());
 dfe.printStackTrace();
 }
 return decodedData;
 } 

 /**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
 QRCodeDecoderHandler handler = new QRCodeDecoderHandler();
 String imgPath = "d:/test/twocode/Michael_QRCode.png";
 String decoderContent = handler.decoderQRCode(imgPath);
 System.out.println("解析结果如下:");
 System.out.println(decoderContent);
 System.out.println("========decoder success!!!");
 } 

 class J2SEImage implements QRCodeImage {
 BufferedImage bufImg; 

 public J2SEImage(BufferedImage bufImg) {
 this.bufImg = bufImg;
 } 

 public int getWidth() {
 return bufImg.getWidth();
 } 

 public int getHeight() {
 return bufImg.getHeight();
 } 

 public int getPixel(int x, int y) {
 return bufImg.getRGB(x, y);
 } 

 }
}

运行结果如下(解码出的内容和之前输入的内容一致 ):

解析结果如下:

Hello 大大、小小,welcome to QRCode!

Myblog [ http://sjsky.iteye.com ]

EMail [ sjsky007@gmail.com ]

Twitter [ @suncto ]

========decoder success!!!

以上就是对Java实现二维码QRCode的编码和解码的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

(0)

相关推荐

  • Java二维码登录流程实现代码(包含短地址生成,含部分代码)

    近年来,二维码的使用越来越风生水起,笔者最近手头也遇到了一个需要使用二维码扫码登录网站的活,所以研究了一下这一套机制,并用代码实现了整个流程,接下来就和大家聊聊二维码登录及的那些事儿. 二维码原理 二维码是微信搞起来的,当年微信扫码二维码登录网页微信的时候,感觉很神奇,然而,我们了解了它的原理,也就没那么神奇了.二维码实际上就是通过黑白的点阵包含了一个url请求信息.端上扫码,请求url,做对应的操作. 一般性扫码操作的原理 微信登录.支付宝扫码支付都是这个原理: 1. 请求二维码 桌面端向服务

  • 基于google zxing的Java二维码生成与解码

    本文实例为大家分享了Java二维码生成与解码的具体代码,供大家参考,具体内容如下 一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.1.0</version> &

  • java中ZXing 生成、解析二维码图片的小示例

    概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME.J2SE和Android. 官网:ZXing github仓库 实战 本例演示如何在一个非 android 的 Java 项目中使用 ZXing 来生成.解析二维码图片. 安装 maven项目只需引入依赖: <dependency> <groupId>com.google.zxing

  • Java利用Zxing生成二维码的简单实例

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing-core.jar 包加入到classpath下. 1.2 二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用. import com.google.zxing.common.BitMatrix; i

  • java生成彩色附logo二维码

    java生成二维码有很多开发的jar包如zxing是谷歌开发的,这里的话我使用zxing的开发包来实现的.我们在很多项目中需要动态生成二维码,来提供给用户,这样让更多人能够很好的通过二维码来体验自己的应用. 下面贴出代码,已经测试通过,大家可以直接复制代码使用: 最后实现结果: java生成二维码 代码如下: import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom

  • java 二维码的生成与解析示例代码

    二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍. 2.  编码范围广 该条码可以把图片.声音.文字.签字.指纹等可以数字化的信息进行编码,用条码表示出来:可以表示多种语言文字:可表示图像数据. 3.  容错能力强,具有纠错功能 这使得二维条码因穿孔.污损等引起局部损坏时,照样可以正确

  • java实现二维码生成的几个方法(推荐)

    java实现二维码生成的几个方法,具体如下: 1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj 2: 使用BarCode4j生成条形码和二维码 BarCode4j网址:http://sourcefor

  • 利用Java生成带有文字的二维码

    介绍 主要使用了goole的zxing包,下面给出了示例代码,很方便大家的理解和学习,代码都属于初步框架,功能有了,需要根据实际使用情况完善优化. 第一步.maven导入zxing <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.1</version> </dependency>

  • Java中基于maven实现zxing二维码功能

    maven所需jar <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifac

  • 用JAVA 设计生成二维码详细教程

    教你一步一步用 java 设计生成二维码 在物联网的时代,二维码是个很重要的东西了,现在无论什么东西都要搞个二维码标志,唯恐落伍,就差人没有用二维码识别了.也许有一天生分证或者户口本都会用二维码识别了.今天心血来潮,看见别人都为自己的博客添加了二维码,我也想搞一个测试一下. 主要用来实现两点: 1. 生成任意文字的二维码. 2. 在二维码的中间加入图像. 一.准备工作. 准备QR二维码3.0 版本的core包和一张jpg图片. 下载QR二维码包. 首先得下载 zxing.jar 包, 我这里用的

随机推荐