java生成_解析二维码

package com.fh;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;

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

import com.swetake.util.Qrcode;

public class TwoDimensionCode {

?/**
? * 生成二维码(QRCode)图片
? *
? * @param content
? *??????????? 存储内容
? * @param imgPath
? *??????????? 图片路径
? */
?public void encoderQRCode(String content, String imgPath) {
??this.encoderQRCode(content, imgPath, "png", 2);
?}

?/**
? * 生成二维码(QRCode)图片
? *
? * @param content
? *??????????? 存储内容
? * @param output
? *??????????? 输出流
? */
?public void encoderQRCode(String content, OutputStream output) {
??this.encoderQRCode(content, output, "png", 2);
?}

?/**
? * 生成二维码(QRCode)图片
? *
? * @param content
? *??????????? 存储内容
? * @param imgPath
? *??????????? 图片路径
? * @param imgType
? *??????????? 图片类型
? */
?public void encoderQRCode(String content, String imgPath, String imgType) {
??this.encoderQRCode(content, imgPath, imgType, 2);
?}

?/**
? * 生成二维码(QRCode)图片
? *
? * @param content
? *??????????? 存储内容
? * @param output
? *??????????? 输出流
? * @param imgType
? *??????????? 图片类型
? */
?public void encoderQRCode(String content, OutputStream output,
???String imgType) {
??this.encoderQRCode(content, output, imgType, 2);
?}

?/**
? * 生成二维码(QRCode)图片
? *
? * @param content
? *??????????? 存储内容
? * @param imgPath
? *??????????? 图片路径
? * @param imgType
? *??????????? 图片类型
? * @param size
? *??????????? 二维码尺寸
? */
?public void encoderQRCode(String content, String imgPath, String imgType,
???int size) {
??try {
???BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);

???File imgFile = new File(imgPath);
???// 生成二维码QRCode图片
???ImageIO.write(bufImg, imgType, imgFile);
??} catch (Exception e) {
???e.printStackTrace();
??}
?}

?/**
? * 生成二维码(QRCode)图片
? *
? * @param content
? *??????????? 存储内容
? * @param output
? *??????????? 输出流
? * @param imgType
? *??????????? 图片类型
? * @param size
? *??????????? 二维码尺寸
? */
?public void encoderQRCode(String content, OutputStream output,
???String imgType, int size) {
??try {
???BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);
???// 生成二维码QRCode图片
???ImageIO.write(bufImg, imgType, output);
??} catch (Exception e) {
???e.printStackTrace();
??}
?}

?/**
? * 生成二维码(QRCode)图片的公共方法
? *
? * @param content
? *??????????? 存储内容
? * @param imgType
? *??????????? 图片类型
? * @param size
? *??????????? 二维码尺寸
? * @return
? */
?private BufferedImage qRCodeCommon(String content, String imgType, int size) {
??BufferedImage bufImg = null;
??try {
???Qrcode qrcodeHandler = 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 = new BufferedImage(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 {
????throw new Exception("QRCode content bytes length = "
??????+ contentBytes.length + " not in [0, 800].");
???}
???gs.dispose();
???bufImg.flush();
??} catch (Exception e) {
???e.printStackTrace();
??}
??return bufImg;
?}

?/**
? * 解析二维码(QRCode)
? *
? * @param imgPath
? *??????????? 图片路径
? * @return
? */
?public String decoderQRCode(String imgPath) {
??// QRCode 二维码图片的文件
??File imageFile = new File(imgPath);
??BufferedImage bufImg = null;
??String content = null;
??try {
???bufImg = ImageIO.read(imageFile);
???QRCodeDecoder decoder = new QRCodeDecoder();
???content = new String(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;
?}

?/**
? * 解析二维码(QRCode)
? *
? * @param input
? *??????????? 输入流
? * @return
? */
?public String decoderQRCode(InputStream input) {
??BufferedImage bufImg = null;
??String content = null;
??try {
???bufImg = ImageIO.read(input);
???QRCodeDecoder decoder = new QRCodeDecoder();
???content = new String(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;
?}

?public static void main(String[] args) {
??String imgPath = "F:/a.png";
??/*String encoderContent = "Hello 大大、小小,welcome to QRCode!"
????+ "\nMyblog [ http://sjsky.iteye.com ]"
????+ "\nEMail [ [email protected] ]";*/
??
??String encoderContent = "http://www.baidu.com";
??TwoDimensionCode handler = new TwoDimensionCode();
??handler.encoderQRCode(encoderContent, imgPath, "png");
??// try {
??// OutputStream output = new FileOutputStream(imgPath);
??// handler.encoderQRCode(content, output);
??// } catch (Exception e) {
??// e.printStackTrace();
??// }
??System.out.println("========encoder success");

??String decoderContent = handler.decoderQRCode(imgPath);
??System.out.println("解析结果如下:");
??System.out.println(decoderContent);
??System.out.println("========decoder success!!!");
?}
}

?

?

package com.fh;

import java.awt.image.BufferedImage;

import jp.sourceforge.qrcode.data.QRCodeImage;

public class TwoDimensionCodeImage implements QRCodeImage {

?BufferedImage bufImg;

?public TwoDimensionCodeImage(BufferedImage bufImg) {
??this.bufImg = bufImg;
?}

?@Override
?public int getHeight() {
??return bufImg.getHeight();
?}

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

?@Override
?public int getWidth() {
??return bufImg.getWidth();
?}

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。