说明

相关包

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 二维码的更多相关文章

  1. 基于java生成二维码

                                                                                            二维码  二维码的概念 ...

  2. Java生成二维码(Java程序都可以使用)

    工具类,链接:https://pan.baidu.com/s/18U399fTH5wBJPnL97pAekg 提取码:bmw7 注:里面的corejar包是使用的zxing的代码,我只是将其导出的ja ...

  3. Javascript生成二维码(QR)

    网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...

  4. iOS二维码生成、识别、扫描等

    二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...

  5. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  6. 免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)

    在生活中有一种东西几乎已经快要成为我们的另一个电子”身份证“,那就是二维码.无论是在软件开发的过程中,还是在普通用户的日常中,几乎都离不开二维码.二维码 (dimensional barcode) , ...

  7. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...

  8. 微信小程序的机会在于重新理解群组与二维码

    历时一年,唯一一个尚未发布就获得Pony Ma与Allen Zhang站台的产品:微信小程序,将于2017年1月9日正式上线了.我很期待.唯一要警惕的是:防止长考出臭棋. 在上线前夕,我对于如何借助小 ...

  9. javaScript生成二维码(支持中文,生成logo)

    资料搜索 选择star最多的两个 第一个就是用的比较多的jquery.qrcode.js(但不支持中文,不能带logo)啦,第二个支持ie6+,支持中文,根据第二个源代码,使得,jquery.qrco ...

随机推荐

  1. stdio - 标准输入输出库函数

    SYNOPSIS 总览 #include <stdio.h> FILE *stdin; FILE *stdout; FILE *stderr; DESCRIPTION 描述 标注 I/O ...

  2. HashMap循环

    1. Map的四种遍历方式下面只是简单介绍各种遍历示例(以HashMap为例),各自优劣会在本文后面进行分析给出结论. (1) for each map.entrySet()   Java   1 2 ...

  3. qfile读取txt文件

    QFile f("D:\\测试数据\\单波束数据\\灯浮.TGT"); if (!f.open(QIODevice::ReadOnly|QIODevice::Text))//打开指 ...

  4. _declspec(dllexport)和.def(转)

    节选自:windows下编译和使用动态库dll http://blog.eonew.cn/archives/865 Microsoft 在 Visual C++ 的 16 位编译器版本中引入了 __e ...

  5. cdq分治(陈丹琦分治)

    //转自:http://blog.csdn.net/snowy_smile/article/details/49668689 /* 算法介绍之cdq分治: 其实cdq分治的思想与应用都能被很简单地描述 ...

  6. leetcood学习笔记-27-移除元素

    题目: 第一次提交: class Solution: def removeElement(self, nums, val: int) -> int: for i in range(len(num ...

  7. Delphi 类(TObject、TPersistent、TComponent、TControl、TWinControl、TCustomControl、TGraphicControl、TInterfacedObject)简单介绍

      TObject:    VCL中所有类的根类,即是说:VCL中所有的类/组件/控件都是从TObject中继承而来.TObject类中定义了基本的 构造方法和析构方法.   TPersistent: ...

  8. [CQOI2011]放棋子 题解(dp+组合数学)

    Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数. 第二行包含c个正整数,即每个颜色的棋子数. 所有颜色的棋子总数保证不超过nm. N,M<=3 ...

  9. CSS:目录

    ylbtech-CSS:目录 1.返回顶部 1. http://www.runoob.com/css/css-tutorial.html 2. https://www.w3school.com.cn/ ...

  10. 导入安全证书到jdk

    一:.导入证书 1.打开doc窗口,打开cmd,执行命令: keytool -import -file f:\ca.crt -keystore "%JAVA_HOME%\jre\lib\se ...