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

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的编码和解码的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
qrcode二维码解码器、qrcode 二维码 解码、qrcode.js 解析二维码、qrcode 解析二维码、qrcodenet 解析二维码,以便于您获取更多的相关知识。

时间: 2024-07-29 01:54:40

Java实现二维码QRCode的编码和解码与示例解析_java的相关文章

java实现二维码生成的几个方法(推荐)_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实现二维码([带]logo)的绘制和解析(swetake.util.Qrcode)

使用jar:qrcode.jar和源码twodimensioncode: 1:绘制二维码: package com.tsxs.tools.twodimensioncode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStrea

JAVA 生成二维码 代码

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

java生成二维码的几种实现方便及实例

先我们来看一个直接用java代码生成二维码的实例. Java代码 package foo;       public class App {       public static void main(String[] args) {             String imgPath = "O:/erweima/fanglei@nannan.jpg";             String encoderContent = "Hello,world!";    

Java 生成二维码的工具资料整理_java

1.  使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着  http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj  有朋友问我要这个图片生成的代码,我就在网上搜索然后整理了一个类,首先要把SwetakeQRCode的jar包qrcode.jar放在工程的编译

JAVA生成二维码(zxing)

上一篇博客中介绍了条码的使用示例,这一篇继续介绍如何使用JAVA生成二维码. package com.hq.util; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; import com.google

ios开发之Swift二维码QRCode的读取(从图片读取 ,或通过摄像头扫描)

1,直接读取图片中的二维码 使用 CIDetector 可以很方便的检测并读取二维码.下面是一个从 UIImage 中读取二维码的样例,我们要把图片上所有的二维码信息都打印出来. 开发之Swift二维码QRCode的读取(从图片读取 ,或通过摄像头扫描)-qrcode 读取二维码">    代码如下 复制代码 import UIKit   class ViewController: UIViewController {       override func viewDidLoad() {

利用java实现二维码和背景图的合并_java

背景介绍: 最近我们这边需要做一个自动生成二维码并且还要将二维码嵌入现有的背景模板中,一直又没写过这些方面的东西,突然写还真是有点迷糊,特别是对于java图片API并不很熟悉,所以参考了很多网友的分享,很快做出来了,现在分享一下 注意: 关于二维码的生成方式在文章java生成带logo的多彩二维码  已经写过了,大家可以合起来一起使用. 实例代码: BufferedImage image= bim;//二维码 BufferedImage bg= ImageIO.read(路径);//获取北京图片

Java 生成二维码

1.java这边的话生成二维码有很多开发的jar包如zxing,qrcode.q前者是谷歌开发的后者则是小日本开发的,这里的话我使用zxing的开发包来弄 2.先下载zxing开发包,这里用到的只是core那个jar包 3.使用zxing开发还需要一个类,代码如下 01 package org.lxh; 02 import com.google.zxing.common.BitMatrix; 03   04 import javax.imageio.ImageIO; 05 import java