类1:
package com.tyzs.util;
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
public class TwoDimensionCodeImage implements QRCodeImage {
BufferedImage bufImg;
public TwoDimensionCodeImage(BufferedImagebufImg) {
this.bufImg = bufImg;
}
public int getHeight() {
returnbufImg.getHeight();
}
public int getPixel(int x, int y) {
return bufImg.getRGB(x,y);
}
public int getWidth() {
return bufImg.getWidth();
}
}
类2:
package com.tyzs.util;
import java.awt.Color;
import java.awt.Graphics2D;
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.exception.DecodingFailedException;
import com.swetake.util.Qrcode;
public class TwoDimensionCode {
public void encoderQRCode(String content, StringimgType, int size,
StringimagePath) {
BufferedImage bufImg =null;
try {
QrcodeqrcodeHandler = new Qrcode();
//设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
//设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
qrcodeHandler.setQrcodeVersion(size);
//获得内容的字节数组,设置编码格式
byte[]contentBytes = content.getBytes("utf-8");
// 图片尺寸
int imgSize =67 + 12 * (size - 1);
bufImg = newBufferedImage(imgSize, imgSize,
BufferedImage.TYPE_INT_RGB);
Graphics2D gs= bufImg.createGraphics();
//设置背景颜色
gs.setBackground(Color.WHITE);
gs.clearRect(0,0, imgSize, imgSize);
//设定图像颜色> BLACK
gs.setColor(Color.BLACK);
//设置偏移量,不设置可能导致解析出错
int pixoff =2;
// 输出内容>二维码
if(contentBytes.length > 0 && contentBytes.length <800) {
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{
thrownew Exception("QRCode content bytes length = "
+contentBytes.length + " not in [0, 800].");
}
//LOGO
gs.dispose();
bufImg.flush();
} catch (Exception e) {
e.printStackTrace();
}
// 生成二维码QRCode图片
try {
File imgFile= new File(imagePath);
ImageIO.write(bufImg,imgType, imgFile);
} catch (IOException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
}
public String decoderQRCode(String imgPath){
// QRCode 二维码图片的文件
File imageFile = newFile(imgPath);
BufferedImage bufImg =null;
String content = null;
try {
bufImg =ImageIO.read(imageFile);
QRCodeDecoderdecoder = new QRCodeDecoder();
content = newString(decoder.decode(new TwoDimensionCodeImage(
bufImg)),"utf-8");
} catch (IOException e) {
System.out.println("Error:" + e.getMessage());
e.printStackTrace();
} catch(DecodingFailedException dfe) {
System.out.println("Error:" + dfe.getMessage());
dfe.printStackTrace();
}
return content;
}
}
类3:测试类
package com.tyzs.test;
import com.tyzs.util.TwoDimensionCode;
public class Test {
public static void main(String[] args) {
String imgPath ="F:/test.png";
String encoderContent ="http://www.weibo.com/tuanyaozhishang";
TwoDimensionCode handler = newTwoDimensionCode();
handler.encoderQRCode(encoderContent,"png", 20, imgPath); // 内容 图片路径
// 图片格式 大小
System.out.println("========encodersuccess");
String decoderContent =handler.decoderQRCode(imgPath); // 图片路径
System.out.println("解析结果如下:");
System.out.println(decoderContent);
System.out.println("========decodersuccess!!!");
}
}
效果图如下:
转载说明:http://blog.sina.com.cn/s/blog_918966b40101budt.html