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

soゝso 2016-08-22 17:14:14 14818

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包下载请看附件。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/92.html

转载时必须以链接形式注明原始出处及本声明。


附件下载:

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

本文主题:

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

相关文章
Java 解析二维码google.ZXing 讲解
使用zxing解析二维码抛出com.google.zxing.NotFoundException 解决方案
微信支付功能--PC端生成二维码,实现扫描支付功能
json 解析与生成工具类 ,JSON操作讲解(附件)
Java 解析JSON,JSON-LIB jar包下载和使用。
Java生成验证合集()GJF版
Java生成验证合集(一)简单版
MyEclipse8.5 注册生成 Java代码实现方式。永久免费
RBAC 介绍,案例讲解
Shiro教程()Maven管理Shrio Jar包
最新文章
Macbook teamviewer 突破5分钟,苹果电脑重置 Mac 地址,100%解决限制 260
腾讯云代金券 10000 元/ 30000 代金券领取技巧 349
SEO 换友情链接的主意事项,友情链接断链、友情链接套路说明 236
Springboot + Mybatis,数据库多数据源配置项目Demo【源码下载】 1930
Mac mtr 安装并使用,mrt: command not found 301
Java 集成阿里云消息队列,日志消息存储 501
域名备案注意事项,网站域名ICP备案快速通过攻略【干货分享】 486
Springboot 集成Aliyun MQ消息队列,Aliyun 消息队列配置及代码实现 841
SpringBoot 集成Spring-data-redis,redis对象序列化存储 2049
天气API,全国天气 JSON API接口,可以获取十五天的天气预报 616
最热文章
Elasticsearch教程(四) elasticsearch head 插件安装和使用 126842
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 108595
Elasticsearch教程(六) elasticsearch Client创建 78833
Elasticsearch教程(八) elasticsearch delete 删除数据(Java) 74451
Elasticsearch教程(二),IK分词器安装 73234
Elasticsearch教程(一),全程直播(小白级别) 65838
Elasticsearch教程(五) elasticsearch Mapping的创建 61924
Elasticsearch教程(三),IK分词器安装 (极速版) 56373
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java) 53568
Java 解析JSON,JSON-LIB jar包下载和使用。 49034

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

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

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

支付扫码

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

正在加载... ...