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

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

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

本站 Demo  https://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

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


附件下载:

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

本文主题:

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

关于作者
一个低调而闷骚的男人。
相关文章
使用zxing解析二维码抛出com.google.zxing.NotFoundException 解决方案
微信支付功能--PC端生成二维码,实现扫描支付功能
json 解析与生成工具类 ,JSON操作讲解(附件)
Java 完美解析.plist & 生成plist ,Android 解析.plist
阿里云DNS 解析讲解,SEO配置搜索引擎线路解析
Java 解析JSON,JSON-LIB jar包下载和使用。
Java生成验证合集()GIF版,Java生成动图验证
MyEclipse8.5 注册生成 Java代码实现方式。永久免费
Java获取浏览器请求头(User-Agent),分浏览器信息,系统信息的几种办法。
Java 实现多个级域名访问同一个Tomcat(系统)。
最新文章
使用七牛云存储实现图片API,自动删除图片方案合集 1124
神速ICP备案经验分享,ICP备案居然一天就通过了 2232
百度加强推送URL链接,百度SEO强行推送链接JavaScript代码案例讲解。 2913
SOJSON 拓展服务器被DDos攻击了一晚上,是如何解决的? 3334
湖南地区备案“新增网站需提交组网方案或解释说明”,关于备案做简单叙述 3314
企查查你是个什么企业,骗子的帮凶,诈骗的集中营,通过企查查骚扰企业电话不断,为所欲为的企查查 9613
Java爬取百度云观测对网站的检测数据,获取子域名及域名的安全信息 2555
【2020年】百度搜索词获取,获取百度搜索的关键词【真实有效】 7031
Nodejs环境安装,Nodejs环境安装一篇就够了 1804
iOS版淘宝打开提示“您使用的程序是内测版本,将于2020-03-28到期,到期将无法使用,请尽快下载最新版本” 2489
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 432114
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 417796
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 350767
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 311900
免费天气API,天气JSON API,不限次数获取十五天的天气预报 287944
Elasticsearch教程(四) elasticsearch head 插件安装和使用 221304
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 177412
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 136343
Elasticsearch教程(一),全程直播(小白级别) 119548
Elasticsearch教程(五) elasticsearch Mapping的创建 98873

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

入群需要5元为的是没有垃圾广告,如果没有QQ钱包,可以加群主拉进。

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

支付扫码

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

查看我的收藏

正在加载... ...