JavaWeb 二维码
说明
相关包
zxing-core3.3
zxing-javase3.3
junit4.12
POM文件
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
相关代码
package com;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import org.junit.Test;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageConfig;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.oned.Code128Writer;
public class Demo {
static class ImageFormat {
static final String PNG = "png";
static final String GIF = "gif";
static final String BMP = "bmp";
static final String JPEG = "jpeg";
}
@Test
public void qrcodeBuildTest() {
// 输出目录
String outPath = "d:\\demo\\";
// 输出文件名
String outName = "zxingDemo.png";
// 生成内容
String contents = "Qrcode Demo";
Demo.qrCodeBuild(contents, outPath, outName, ImageFormat.PNG, 200, 200);
}
@Test
public void barCodeBuildTest() {
// 输出目录
String outPath = "d:\\demo\\";
// 输出文件名
String outName = "zxingDemo.png";
// 生成内容
String contents = "barCode Demo";
Demo.barCodeBuild(contents, outPath, outName, ImageFormat.PNG, 180, 60);
}
@Test
public void qrCodeParseTest() {
// String content = Demo.qrcodeParse("d:\\demo\\zxingDemo.png");
String content = Demo.qrcodeParse(
"http://dl2.iteye.com/upload/attachment/0103/0259/f1c4cf6c-c825-3504-8c9e-97019e3796d1.png");
System.out.println(null == content ? "解析失败" : content);
}
/**
* 二维码生成
*
* @param contents
* 文本内容
* @param outPath
* 输出目录
* @param outName
* 输出文件
* @param format
* 输出文件类型(png,jpeg...)
* @param width
* 生成图片宽度
* @param height
* 生成图片高度
*/
public static void qrCodeBuild(String contents, String outPath, String outName, String format, int width,
int height) {
try {
// 输出目录检测
if (!new File(outPath).exists()) {
new File(outPath).mkdirs();
}
Path path = FileSystems.getDefault().getPath(outPath, outName);
// 相关配置(编码、白边)
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.MARGIN, 1);
// 生成
BitMatrix matrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints);
// 输出二维码
MatrixToImageConfig config = new MatrixToImageConfig(0xFF000000, 0xFFFFFFFF);
MatrixToImageWriter.writeToPath(matrix, format, path, config);
// 输出为文件流(Web项目)
// OutputStream stream = response.getOutputStream();
// MatrixToImageWriter.writeToStream(matrix, format, stream,config);
System.out.println("调试输出:OK");
} catch (WriterException | IOException e) {
e.printStackTrace();
}
}
/**
* 二维码解析
*
* @param inPath
* 二维码图片地址
* @return 二维码文本内容
*/
public static String qrcodeParse(String inPath) {
// 文件检测
if (!new File(inPath).exists()) {
System.out.println("文件不存在:" + inPath);
return null;
}
String content = "";
try {
// 读取图片
BufferedImage image = ImageIO.read(new File(inPath));
// 提取图片像素
LuminanceSource source = new BufferedImageLuminanceSource(image);
// 二值化(将灰度设置为0或255)
Binarizer binarizer = new HybridBinarizer(source);
// 转换为二进制图片
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
// 相关配置
Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
// 解析
Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码
// 获取文本
content = result.getText();
// 输出条形码类型(我使用的二维码,所以会输出QR_CODE)
System.out.println(result.getBarcodeFormat());
} catch (IOException | NotFoundException e) {
e.printStackTrace();
}
return content;
}
/***
* 一维码生成
*
* @param content
* 文本
* @param outPath
* 输出目录
* @param outName
* 输出文件名
* @param format
* 文件格式
* @param width
* 生成图片宽度
* @param height
* 生成图片高度
*/
public static void barCodeBuild(String content, String outPath, String outName, String format, int width,
int height) {
// 文件检测
if (!new File(outPath).exists()) {
new File(outPath).mkdirs();
}
Path path = FileSystems.getDefault().getPath(outPath, outName);
try {
Code128Writer writer = new Code128Writer();
BitMatrix matrix = writer.encode(content, BarcodeFormat.CODE_128, width, height);
MatrixToImageWriter.writeToPath(matrix, format, path);
System.out.println("调试输出:OK");
} catch (WriterException | IOException e) {
e.printStackTrace();
}
}
}
JavaWeb 二维码的更多相关文章
- 基于java生成二维码
二维码 二维码的概念 ...
- Java生成二维码(Java程序都可以使用)
工具类,链接:https://pan.baidu.com/s/18U399fTH5wBJPnL97pAekg 提取码:bmw7 注:里面的corejar包是使用的zxing的代码,我只是将其导出的ja ...
- Javascript生成二维码(QR)
网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...
- iOS二维码生成、识别、扫描等
二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...
- 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo
有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...
- 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- 微信小程序的机会在于重新理解群组与二维码
历时一年,唯一一个尚未发布就获得Pony Ma与Allen Zhang站台的产品:微信小程序,将于2017年1月9日正式上线了.我很期待.唯一要警惕的是:防止长考出臭棋. 在上线前夕,我对于如何借助小 ...
- javaScript生成二维码(支持中文,生成logo)
资料搜索 选择star最多的两个 第一个就是用的比较多的jquery.qrcode.js(但不支持中文,不能带logo)啦,第二个支持ie6+,支持中文,根据第二个源代码,使得,jquery.qrco ...
随机推荐
- redis搭建主从
主从概念 ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构 master用来写数据,slave用来读数据,经统计:网站的读写比率 ...
- 【Luogu】【关卡2-3】排序(2017年10月) 【AK】
任务说明:将杂乱无章的数据变得有规律.有各种各样的排序算法,看情况使用. 这里有空还是把各种排序算法总结下吧.qsort需要会写.. P1177 [模板]快速排序 这个题目懒得写了,直接sort了.. ...
- 正规式α向有限自动机M的转换
[注:这一节是在学习东南大学廖力老师的公开课时,所记录的一些知识点截屏,谢谢廖力老师的辛劳付出] 引入3条正规式分裂规则来分裂α,所得到的是NFA M(因为包含ε弧,之后进行确定化就是所需要求得DF ...
- 初试avalon
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue 运行项目时,Uncaught (in promise) DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL
npm run dev 运行项目后 验证码显示不出来 并报错 Uncaught (in promise) DOMException: Failed to execute 'open' on 'XML ...
- JSTL标签的用法详解
在JSP中写Java代码是一件很恶心的事情,代码量少的话还可以,要是多的话,就蛋疼了,整个页面都是<% %>所以EL表达式和JSTL就应运而生了,这里我们注重讲解一下JSTL标签的使用: ...
- 3-基于LoG的特征检测子
- PHP学习(MVC架构与面向对象)
想好好的学一下php中的一些面向对象的知识,以前只是为了打CTF随意的学了一下,但是为了以后的代码审计(准备PHP这边把thinkphp这个框架好好的学一下). PHP面向对象的基本知识 类与对象 类 ...
- jmeter之-图形监控
一.安装 https://jmeter-plugins.org/downloads/old/ 下载JMeterPlugins-Standard-1.4.0(监听器-图形界面)和ServerAgent- ...
- unittest框架学习笔记四之report
# coding=utf-8'''created:2018/3/29 author:star project:test report'''# import time,os# from selenium ...