众所周知,爪哇,是一种神奇的编程语言,用JAVA实现某一个功能,只是随便上网找一些对应的实现JAR包即可,于是,有了像JAR114这样专门提供给爪哇程序猿的下载的那么一堆网站。
本节主要讲JAVA实现二维码的编码与解码。
废话也就那么多了,转入正题。
需要的JAR包如下。
编码lib:Qrcode_swetake.jar (官网介绍-- http://www.swetake.com/qr/index-e.html)
解码lib:qrcode.jar(官网介绍-- http://sourceforge.jp/projects/qrcode/)
【一】、编码:
QRCodeEncoderHandler.java
Java代码
package michael.qrcode;
import java.awt.Color;
import java.awt.Graphics2D;
importjava.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)图片
* @paramcontent
* @paramimgPath
*/
public voidencoderQRCode(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 argsthe command line arguments
*/
public static voidmain(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");
}
}
可用手机二维码扫描软件 对运行后生成的二维码图片进行验证
下面是解码代码
【二】、解码:
QRCodeDecoderHandler.java
Java代码
package michael.qrcode;
importjava.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
importjp.sourceforge.qrcode.QRCodeDecoder;
importjp.sourceforge.qrcode.data.QRCodeImage;
importjp.sourceforge.qrcode.exception.DecodingFailedException;
/**
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class QRCodeDecoderHandler{
/**
* 解码二维码
* @paramimgPath
* @returnString
*/
public StringdecoderQRCode(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(newString(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 argsthe command line arguments
*/
public static voidmain(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 J2SEImageimplements 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的编码和解码
QRCode 二维码编码解码标准附录.pdf
Java实现二维码QRCode的编码和解码所需类库
完整的能够实现将文本文件编码为二维码图片或将二维码图片解码为文本的小工具。 基于zxing的解码库,libqrcode的编码库,开源可根据需求修改。 vs工程、c++编写,命令行下输入参数即可实现转化,移植性强。 支持中文...
QRCode二维码维码支持中文Asp.Net(C#),是VS2010的项目,VS2008、VS2005也可以用,需要在你的项目里引用ThoughtWorks.QRCode.dll,在二维码生成页面内加上下面的代码: using System.Drawing.Imaging; using Thought...
c#QRCode二维码生成与解码,有界面,可运行,值得参考学习!
二维码采用黑白相间的平面几何图形通过相应的编码算法来记录文字、图片、网址等信息的条码图片
QRCode.jar包和二维码编码与解码的实现
Java实现二维码QRCode的编码和解码
Java实现二维码QRCode的编码和解码
完整二维码编码和解码包,本人收集整合成一个包,并附带完整的工具方法和运行例子可直接使用到手机客户端或应用。 解压后,引用TwoDimCode.jar包,运行使用TwoDimCode.java 绝对超值,下载看看吧!
Java QRCode二维码生成与识别,开放源代码,多种生成方式.支持汉字存储与解析。
QRcode二维码编解码,2012年6月3日成功开发出QRcode二维码BS、cs编码、解码程序,此为CS版本。100% C#源码,分值高点而已。
QRcode二维码编解码BS,2012年6月3日成功开发出QRcode二维码BS、cs编码、解码程序,此为BS版本。100% c# 源码 asp.net的,分值高哦。
Java实现二维码QRCode的编码和解码,二维码生成开发、二维码内容解析开发所需jar包,二维码生成开发。
二维码qrcode编码 DLL,本dll提供两个函数: int QrcodeDraw(long hWnd, const char* data, int errorLevel, int cellSize, int margin) hWnd 要显示二维码的窗口名柄 data 要显示的数据 errorLevel 容错级别 H=2,...
二维条码的编码与解码的源码及测试程序,对需要学习研究二维条码的编码原码的同仁非常有用
本代码为二维码生成和解析的Java实现代码,包括三个类和一个QRCode的jar包(一个jar包用于生成二维码,一个jar包用于读取二维码尤其用于读取的jar包不好下载,所以就一起放进来了,方便大家学习使用),一个生成...
Java用qrcode生成二维码,同zxing生成二维码技术,,,