Java实现二维码生成与识别
java实现QRCODE二维码的编码与解码实例
本节主要讲JAVA实现二维码的编码与解码。
废话也就那么多了,转入正题。
需要的JAR包如下。
编码lib:Qrcode_swetake.jar (官网介绍-- http://www.swetake.com/qr/index-e.html)
解码lib:qrcode.jar (官网介绍-- http://sourceforge.jp/projects/qrcode/)
【一】、编码:
QRCodeEncoderHandler.java
Java代码
package michael.qrcode;
import java.awt.Color;
import java.awt.Graphics2D;
importjava.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
/**
* 二维码生成器
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class QRCodeEncoderHandler{
/**
* 生成二维码(QRCode)图片
* @paramcontent
* @paramimgPath
*/
public voidencoderQRCode(String content, String imgPath) {
try {
Qrcode qrcodeHandler = new Qrcode();
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
qrcodeHandler.setQrcodeVersion(7);
System.out.println(content);
byte[] contentBytes = content.getBytes("gb2312");
BufferedImage bufImg = new BufferedImage(140, 140,
BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, 140, 140);
// 设定图像颜色> BLACK
gs.setColor(Color.BLACK);
// 设置偏移量 不设置可能导致解析出错
int pixoff = 2;
// 输出内容> 二维码
if (contentBytes.length > 0 && contentBytes.length < 120) {
boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
for (int i = 0; i < codeOut.length; i++) {
for (int j = 0; j < codeOut.length; j++) {
if (codeOut[j][i]) {
gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
} else {
System.err.println("QRCode content bytes length = "
+contentBytes.length + " not in [ 0,120 ]. ");
}
gs.dispose();
bufImg.flush();
File imgFile = new File(imgPath);
// 生成二维码QRCode图片
ImageIO.write(bufImg, "png", imgFile);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param argsthe command line arguments
*/
public static voidmain(String[] args) {
String imgPath = "D:/test/twocode/Michael_QRCode.png";
String content = "Hello 大大、小小,welcome to QRCode!"
+ "\nMyblog [ http://sjsky.iteye.com ]"
+ "\nEMail [ sjsky007@gmail.com ]" + "\nTwitter [ @suncto]";
QRCodeEncoderHandler handler = new QRCodeEncoderHandler();
handler.encoderQRCode(content, imgPath);
System.out.println("encoder QRcode success");
}
}
下面是生产生成好的二维码
可用手机二维码扫描软件 对运行后生成的二维码图片进行验证
下面是解码代码
【二】、解码:
QRCodeDecoderHandler.java
Java代码
package michael.qrcode;
importjava.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
importjp.sourceforge.qrcode.QRCodeDecoder;
importjp.sourceforge.qrcode.data.QRCodeImage;
importjp.sourceforge.qrcode.exception.DecodingFailedException;
/**
* @blog http://sjsky.iteye.com
* @author Michael
*/
public class QRCodeDecoderHandler{
/**
* 解码二维码
* @paramimgPath
* @returnString
*/
public StringdecoderQRCode(String imgPath) {
// QRCode 二维码图片的文件
File imageFile = new File(imgPath);
BufferedImage bufImg = null;
String decodedData = null;
try {
bufImg = ImageIO.read(imageFile);
QRCodeDecoder decoder = new QRCodeDecoder();
decodedData = new String(decoder.decode(new J2SEImage(bufImg)));
// try {
// System.out.println(newString(decodedData.getBytes("gb2312"),
// "gb2312"));
// } catch (Exception e) {
// // TODO: handle exception
// }
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
} catch (DecodingFailedException dfe) {
System.out.println("Error: " + dfe.getMessage());
dfe.printStackTrace();
}
return decodedData;
}
/**
* @param argsthe command line arguments
*/
public static voidmain(String[] args) {
QRCodeDecoderHandler handler = new QRCodeDecoderHandler();
String imgPath = "d:/test/twocode/Michael_QRCode.png";
String decoderContent = handler.decoderQRCode(imgPath);
System.out.println("解析结果如下:");
System.out.println(decoderContent);
System.out.println("========decoder success!!!");
}
class J2SEImageimplements QRCodeImage {
BufferedImage bufImg;
public J2SEImage(BufferedImage bufImg) {
this.bufImg = bufImg;
}
public int getWidth() {
return bufImg.getWidth();
}
public int getHeight() {
return bufImg.getHeight();
}
public int getPixel(int x, int y) {
return bufImg.getRGB(x, y);
}
}
}
运行结果如下(解码出的内容和之前输入的内容一致 ):
解析结果如下:
Hello 大大、小小,welcome to QRCode!
Myblog [ http://sjsky.iteye.com ]
EMail [ sjsky007@gmail.com ]
Twitter [ @suncto ]
========decoder success!!!
Java实现二维码生成与识别相关推荐
- python识别发票二维码_Python 实现二维码生成和识别
今天突然想给自己自己做个头像,然后还是二维码的形式,这样只要扫一扫就可以访问我的主页.然后就开始自己的苦逼之路... 其实实现二维码java,c#,C++等都可以实现:由于自己正在学python,所以 ...
- Java实现二维码生成
title: Java实现二维码生成 categories: "Java" 前言 日前生活上存在很多扫描二维码的场景,支付.加好友-等操作都需要扫描二维码,然后我就在想Java能不 ...
- 【二维码识别】基于matlab GUI灰度+二值化+校正二维码生成与识别【含Matlab源码 635期】
⛄一.二维码生成与识别简介 如今,移动互联网技术日新月异,随着5G时代的来临,广泛应用于数据处理过程中的二维码信息安全日益成为人们越来越关注的问题.以QR码为代表的二维码,以其在信息存储.传输和识别技 ...
- 【二维码识别】灰度+二值化+校正二维码生成与识别【含GUI Matlab源码 635期】
⛄一.二维码生成与识别简介 如今,移动互联网技术日新月异,随着5G时代的来临,广泛应用于数据处理过程中的二维码信息安全日益成为人们越来越关注的问题.以QR码为代表的二维码,以其在信息存储.传输和识别技 ...
- java实现二维码生成的几个方法
java实现二维码生成的几个方法 分类: J2EE2013-06-13 20:32 10390人阅读 评论(1) 收藏 举报 1: 使用SwetakeQRCode在Java项目中生成二维码 http ...
- python 二维码生成与识别
python 二维码生成与识别 1.生成二维码 1.1 qrcode 安装qrcode模块 pip install qrcode 示例: # author:mlnt# createdate:2022/ ...
- Qt开发二维码工具QR二维码生成和识别支持批量生成免费使用
简介 Qt编写,使用第三方库libqrencode和QZxing,支持QR二维码生成和识别,二维码可批量生成,支持中文,还可以设置二维码大小颜色.免费使用,下载链接在本文底部,拿走不用谢,假如您慷慨大 ...
- Java—二维码生成与识别(一)
一.二维码生成 思路:将字符串中的每个字符转为二进制码字符串,保存在二进制码字符串数组中.对二进制码字符串数组中的每个二进制码字符串进行字符遍历,若是'0',则设置画笔颜色为白色,若是'1',则设置画 ...
- java实现二维码生成功能
1.由来: 由于现在对二维码的使用比较多,正好我在项目里面也使用到了,所以写篇博客记录一下. 2.引入依赖: <dependency><groupId>com.google.z ...
最新文章
- ios传值给js_IOS中plus.ios.implements实现OC方法后,在OC中回调传值后JS端无法正确获取...
- oracle rownum分页 出现重复数据
- 元素节点、属性节点、文本节点 的节点属性
- AutoRest - 具有 C# 和 Razor 模板的 Swagger 规范代码生成器。
- java实现矩阵相乘
- 销货清单数据_2020年8月数据科学阅读清单
- 安徽大学2014年c语言平时作业,安徽大学2014年c语言平时作业
- phonegap安装中的问题
- uni-app 条形码(一维码)/二维码生成实现
- python or的用法_python and or用法详解
- 2019-11-18周一上午,学习《图解深度学习》第一章总结
- J2EE架构的优点和缺点有哪些
- hibernate官网
- 【搞定Go语言】第3天22:常用的HTTP服务压测工具介绍
- 按键精灵_字符串提取
- 单相Boost功率因数校正电路(PFC)设计与仿真(Simulink Saber):第二章 仿真模型搭建与控制参数整定
- 小沙弥密码箱V1.0
- 《正确写作美国大学生数学竞赛论文》摘录笔记
- 在CMD中输入adb命令,提示“‘adb‘ 不是内部或外部命令,也不是可运行程序或批处理文件”的解决方法
- 什么是盐加密 为什么使用盐加密密码
热门文章
- 基于python网络编程实现支持购物、转账、存取钱、定时计算利息的信用卡系统...
- 放下身段,路会越走越宽
- 受国际环境影响,中芯国际疑似撤下14纳米代工业务
- 【解决方法】Word在使用方向键时,光标有较大延迟。
- 数据科学家之路 实战1 --- O2O优惠券使用预测(part2)
- 18只网络安全股吸金近5亿元 近八成公司被机构看好
- GD25LQ32ENIGR NOR 存储器、SLB9670VQ2.0模块应用、PM8533B-F3EI PCIe 交换机 接口
- 酒店管理系统设计与实现毕业设计
- python在哪些方向相对来说更容易就业?
- python的字符串类型