Java 解析二维码,google.ZXing 讲解

信息发布:soゝso 发布日期:2016-08-22 17:14 热度:10186 分享到:

Zxing  库的主要部分支持以下几个功能:核心代码的使用、适用于J2SE客户端的版本、适用于 Android  客户端的版本(即BarcodeScanner)、 Android  的集成(通过Intent支持和BarcodeScanner的集成)。

本站 Demo  http://www.sojson.com/deqr.html

Jar包请在附件下载。

下面直接上代码。

代码一:

package com.sojson.code.manager;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.sojson.common.utils.StringUtils;

/**
 * 
 * 开发公司:itboy.net<br/>
 * 版权:itboy.net<br/>
 * <p>
 * 
 * 编码解码 Manager
 * 
 * <p>
 * 
 * 区分 责任人 日期    说明<br/>
 * 创建 周柏成 2015年11月7日  <br/>
 * <p>
 * *******
 * <p>
 * @author zhou-baicheng
 * @email  [email protected]
 * @version 1.0,2015年11月7日 <br/>
 * 
 */
public class CodeManager {

	/**
	 * 通过Url地址或者图片解码
	 * 
	 * @param request
	 * @param url
	 * @return
	 */
	public static Map<String, Object> decode(
			MultipartHttpServletRequest request, String url) {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		InputStream inputStream = null;
		if (StringUtils.isNotBlank(url)) {
			try {
				URL exurl = new URL(url);
				HttpURLConnection httpConn = (HttpURLConnection) exurl
						.openConnection();
				httpConn.connect();
				inputStream = httpConn.getInputStream();
			} catch (Exception e) {
				resultMap.put("status", 500);
				resultMap.put("message", "解码失败,Url地址有误没有获取到文件");
				return resultMap;
			}

		} else {
			Map<String, MultipartFile> fileMap = request.getFileMap();
			try {
				for (String fileName : fileMap.keySet()) {
					MultipartFile mutFile = fileMap.get(fileName);
					inputStream = mutFile.getInputStream();
				}
			} catch (Exception e) {
				resultMap.put("status", 500);
				resultMap.put("message", "解码失败:" + e.getMessage());
			}
		}
		try {
			String code = MatrixUtil.decode(inputStream);
			resultMap.put("text", code);
			resultMap.put("status", 200);
		} catch (Exception e) {
			resultMap.put("status", 500);
			resultMap.put("message", "解码失败");
		}
		return resultMap;
	}
}

代码二:

package com.sojson.code.manager;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;
import java.util.Hashtable;

import javax.imageio.ImageIO;

import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

/**
 * 使用ZXing2.3,生成条码的辅助类。可以编码、解码。编码使用code包,解码需要javase包。
 * 
 */
public final class MatrixUtil {

	private static final String CHARSET = "utf-8";

	/**
	 * 禁止生成实例,生成实例也没有意义。
	 */
	private MatrixUtil() {
	}


	/**
	 * 解码,需要javase包。
	 * 文件方式解码
	 * @param file
	 * @return
	 */
	public static String decode(File file) {

		BufferedImage image;
		try {
			if (file == null || file.exists() == false) {
				throw new Exception(" File not found:" + file.getPath());
			}

			image = ImageIO.read(file);

			LuminanceSource source = new BufferedImageLuminanceSource(image);
			BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

			Result result;

			// 解码设置编码方式为:utf-8,
			Hashtable<DecodeHintType,String> hints = new Hashtable<DecodeHintType,String>();
			hints.put(DecodeHintType.CHARACTER_SET, CHARSET);

			result = new MultiFormatReader().decode(bitmap, hints);

			return result.getText();

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 流方式解码
	 * @param input
	 * @return
	 */
	public static String decode(InputStream input) {
		
		BufferedImage image;
		try {
			if (input == null ) {
				throw new Exception(" input is null");
			}
			
			image = ImageIO.read(input);
			
			LuminanceSource source = new BufferedImageLuminanceSource(image);
			BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
			
			Result result;
			
			// 解码设置编码方式为:utf-8,
			Hashtable<DecodeHintType,String> hints = new Hashtable<DecodeHintType,String>();
			hints.put(DecodeHintType.CHARACTER_SET, CHARSET);
			
			result = new MultiFormatReader().decode(bitmap, hints);
			
			return result.getText();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

Java Jar包下载请看附件。


附件下载

javase-2.0.jar

备注:点击文件名下载,附件源来自云端,只能在本站下载。复制下载链接无效。

本文主题

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

¥我需要走的更远,点击我 赞助。 如果还有疑问,点击我加群,为你提供最好的解答。


工具导航地图

 
Nodejs + socket Demo 赞助二维码 赞助名单 百度口碑点赞 查看QQ群美女帅哥 点击加QQ群 听音乐 开启弹幕 X
反馈意见