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 ...
随机推荐
- [转] datetime.now、datetime.utcnow以及Django中的timezone.now之间的区别
https://blog.csdn.net/sinat_41898105/article/details/80984298 在我们使用Django做项目时经常会遇到时间的存储与读取不一致的问题 ...
- ZOJ-3524 拓扑排序+完全背包(好题)
题意:在一个DAG上,主角初始有W钱起点在s点,每个点有一个代价wi和价值vi,主角从起点走到某一点不能回头走,一路上可以买东西(一个点的东西可以买无限次),且体力消耗为身上负重*路径长度.主角可以在 ...
- 创建win32 dll 空项目
动态库,多字节 win32 空项目 添加导出头文件 类 导入: #pragma once #ifndef IP_CLASS_DLL_H #define IP_CLASS_DLL_H #pragma ...
- weex初始化启动webpack.common.conf.js中的...报语法错误
使用Babel转码 // 最新转码规则 $ npm install --save-dev-g babel-preset-env // react转码规则 $ npm install --save-de ...
- nginx获取头部信息带下划线,获取不到解决方案
nginx获取头部信息带下划线,获取不到解决方案 解决方案: 修改配置文件,进行添加信息如下: underscores_in_headers on; 然后进行重新加载: [root@qa-web co ...
- macOS添加字体
打开macOS的Applications文件夹: 双击其中的Font Book: 把下载的字体解压后的_文件夹_ 拖进来,字体就安装好了.
- 高级运维(五):构建memcached服务、LNMP+memcached、使用Tomcat设置Session、Tomcat实现session共享
一.构建memcached服务 目标: 本案例要求先快速搭建好一台memcached服务器,并对memcached进行简单的添.删.改.查操作: 1> 安装memcached软件,并启动服务d ...
- Service5
DHCP概述及原理• Dynamic Host Configuration Protocol – 动态主机配置协议,由 IETF(Internet 网络工程师任务小组)组织制定,用来简化主机地址分配 ...
- Delphi内建异常类 异常处理参考
标签: delphiexceptionwindowscasting编程integer 2012-05-19 12:53 2579人阅读 评论(0) 收藏 举报 分类: Delphi(96) [详细过程 ...
- 关于Kerberos协议流程的总结
Kerberos协议工作原理分析 这里面借用一下师傅们的图来说明一下  Kerberos协议的流程大致如下(假设A要获取对Server B的访问权限) 第一步(KRB_AS_REQ) 这一步客户 ...