二维码的学习

二维码的生成.

二维码的解析

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();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值