二维码的生成.
二维码的解析
jar包和一下代码http://download.youkuaiyun.com/detail/wangqiankun2010/8149965
package com.taxue.util;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import com.swetake.util.Qrcode;
/**
* 二维码生成器
*
* @author administrator
*/
public class QRCodeEncoderHandler {
public static void main(String[] args) {
newQRCode();
jiexiQRCode();
}
// 生成二维码
public static void newQRCode() {
String content = "王乾坤的二维码测试" + "\n Tel : 1873897**72 "+ "\n EMail : 651518854@qq.com ";
String imgPath = "F:\\ewm.png";
QRCodeEncoderHandler qRCodeEncoderHandler = new QRCodeEncoderHandler();
qRCodeEncoderHandler.encodeQRCode(content, imgPath);
System.out.println("encode QRCode SUCCESS");
}
// 解析二维码
public static void jiexiQRCode() {
QRCodeEncoderHandler qRCodeEncoderHandler = new QRCodeEncoderHandler();
String imagePath = "F:/ewm.png";
String decoderContent = qRCodeEncoderHandler.decoderQRCode(imagePath);
System.out.println("解析结果如下:" + decoderContent);
}
/**
* 生成二维码图片
*
* @param content 内容
* @param imgPath 路径
*/
public void encodeQRCode(String content, String imgPath) {
Qrcode qrcodeHandler = new Qrcode();
qrcodeHandler.setQrcodeEncodeMode('B');// 一种编码方式
qrcodeHandler.setQrcodeErrorCorrect('M'); // M代表信息纠错级别为15% " M是二级
qrcodeHandler.setQrcodeVersion(7);// 版本号
// 版本7为45*45的矩阵;版本每增1,二维码的两个边长都增4,最高版本为是40是177*177的矩阵
System.out.println(content);
try {
byte[] contenBytes = content.getBytes("utf-8");
BufferedImage bufferedImage = new BufferedImage(140, 140,
BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = bufferedImage.createGraphics();
graphics2D.setBackground(Color.WHITE);<span style="font-family: Arial, Helvetica, sans-serif;">// 设定颜色</span>
graphics2D.clearRect(0, 0, 140, 140);
graphics2D.setColor(Color.BLACK);// 设定颜色
int pixoff = 2; <span style="white-space:pre"> </span>// 设置偏移量
if (contenBytes.length > 0 && contenBytes.length < 120) {
boolean[][] codeOut = qrcodeHandler.calQrcode(contenBytes);
for (int i = 0; i < codeOut.length; i++) {
for (int j = 0; j < codeOut.length; j++) {
if (codeOut[j][i]) {
graphics2D.fillRect(j * 3 + pixoff, i * 3 + pixoff,3, 3);
}
}
}
} else {
System.out.println("QRCode content bytes length = "+ contenBytes.length + "不在 [ 0,120 ]. ");
}
graphics2D.dispose();
bufferedImage.flush();
File imageFile = new File(imgPath);
ImageIO.write(bufferedImage, "png", imageFile);// 生成二维码QRCode图片
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 解析二维码
*
* @param imagePath 图片路径
* @return
*/
public String decoderQRCode(String imagePath) {
File imageFile = new File(imagePath);
BufferedImage bufferedImage = null;
String decodeData = null;
try {
bufferedImage = ImageIO.read(imageFile);
QRCodeDecoder qRCodeDecoder = new QRCodeDecoder();
decodeData = new String(qRCodeDecoder.decode(new J2SEImage(
bufferedImage)));
} catch (IOException e) {
System.out.println(e.getMessage() + "io问题");
e.printStackTrace();
}
return decodeData;
}
}
class J2SEImage implements QRCodeImage {
BufferedImage bufferedImage;
public J2SEImage(BufferedImage bufferedImage) {
this.bufferedImage = bufferedImage;
}
public int getHeight() {
return bufferedImage.getHeight();
}
public int getPixel(int x, int y) {
return bufferedImage.getRGB(x, y);
}
public int getWidth() {
return bufferedImage.getWidth();
}
}