幾行程式碼搞定java生成解析二維碼功能

業餘草發表於2015-07-10

最近公司要求掃描二維碼和生成二維碼的功能。而群裡部分網友也提到了。我這裡就寫了一個demo,和大家分享。程式碼很簡介,希望大家能夠喜歡。

網友表示在網上搜尋了很多,發現不是程式碼不全,就是jar不匹配。

我這裡共享了一個zxing的2.2版本的例子,也提供了下載地址。實現程式碼如下:

package com.herman.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 二維碼工具類
 * @author Herman.Xiong
 * @date 2015-7-10 上午10:52:15
 * @version V3.0
 * @since jdk 1.6,tomcat 6.0
 */
public class ZxingUtil {
	private static final Map<EncodeHintType, ErrorCorrectionLevel> encodeMap = new HashMap<EncodeHintType, ErrorCorrectionLevel>();
	private static final Map<DecodeHintType, ErrorCorrectionLevel> decodeMap=new HashMap<DecodeHintType, ErrorCorrectionLevel>();
	private static final String charset="UTF-8",format="png";
	private static final int size=150;
	private ZxingUtil() {}

	/**
	 * 生成二維碼圖片
	 * @author Herman.Xiong
	 * @date 2015-7-10 上午10:26:33
	 * @param file
	 * @throws WriterException
	 * @throws IOException
	 */
	public static void createQRCode(String data, File file)
			throws WriterException, IOException {
		MatrixToImageWriter.writeToFile(new MultiFormatWriter().encode(
				new String(data.getBytes(charset), charset),
				BarcodeFormat.QR_CODE, size, size, encodeMap), format, file);
	}

	/**
	 * 讀取二維碼資訊
	 * @author Herman.Xiong
	 * @date 2015-7-10 上午10:25:58
	 * @param filePath 二維碼圖片路徑
	 * @return
	 * @throws FileNotFoundException
	 * @throws IOException
	 * @throws NotFoundException
	 */
	public static String readQRCode(String filePath)
			throws FileNotFoundException, IOException, NotFoundException {
		return new MultiFormatReader().decode(new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(ImageIO.read(new FileInputStream(filePath))))),decodeMap).getText();
	}
	
	public static void main(String [] arg){
		try{
			createQRCode("http://blog.csdn.net/xmtblog", new File("D:\\111.png"));
			System.out.println(readQRCode("D:\\111.png"));
			//原始碼下載地址:http://download.csdn.net/detail/xmt1139057136/8886473
			//歡迎大家關注我的部落格!如有疑問,請加QQ群:454796847共同學習!
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
執行效果如下:
歡迎大家關注我的部落格!如有疑問,請加QQ群:454796847共同學習!

原始碼下載地址:http://download.csdn.net/detail/xmt1139057136/8886473

相關文章