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

soゝso 2016-08-22 17:14:14 13919
分享到:

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  i@itboy.net
 * @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包下载请看附件。


关于作者
目前就职于国内某电商平台公司打杂。。
相关文章
使用zxing解析二维码抛出com.google.zxing.NotFoundException 解决方案
微信支付功能--PC端生成二维码,实现扫描支付功能
json 解析与生成工具类 ,JSON操作讲解(附件)
Java 解析JSON,JSON-LIB jar包下载和使用。
Java生成验证合集()GJF版
Java生成验证合集(一)简单版
MyEclipse8.5 注册生成 Java代码实现方式。永久免费
RBAC 介绍,案例讲解
由于多说关闭,多说源码不开放,Java模仿多说评论系统实现(
Shiro教程()Maven管理Shrio Jar包
最新文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39042
JS解密,JavaScript 解密,任何JS加密都能100%解密,以及JS 加密讲解 78
阿里云DNS 解析讲解,SEO配置搜索引擎线路解析 44
百度秒收录教程,怎么做到百度秒收入你的页面,SEO 教程 98
CDN 请求返回 connection reset by peer,被拦截请求解决方案 36
Google AdSense 申请技巧,谷歌广告申请通不过教程 68
Mac 安装 JMeter,JMeter 下载,JMeter Http 压力测试【图解】 49
Java 随机从 List 随机获取多个不重复对象,Mysql 随机10条数据 73
支付宝吱口令自动复制脚本,自动复制 JavaScript 代码介绍 895
谈谈这次对 SOJSON 的改版 149
最热文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 39042
Elasticsearch教程(四) elasticsearch head 插件安装和使用 109094
Elasticsearch教程(六) elasticsearch Client创建 73304
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 70759
Elasticsearch教程(二),IK分词器安装 67494
Elasticsearch教程(三),IK分词器安装 (极速版) 54088
Elasticsearch教程(五) elasticsearch Mapping的创建 51612
Elasticsearch教程(一),全程直播(小白级别) 51358
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java) 47776
Elasticsearch权威指南-中文.pdf,Elasticsearch 中文文档下载 40932

骚码加入我们 / 千人QQ群:259217951

入群需要5元,如果没有QQ钱包,可以先Alipay、微信,赞助然后加群主拉进。

二维码生成 来自 >> 二维码生成器

支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

正在加载... ...