2021SC@SDUSC Zxing开源代码(二)调试及运行
2021SC@SDUSC目录一、项目打包1.1 安装Maven1.2 编译jar包二、在IDEA中生成与解析二维码2.1 创建Maven项目2.2 pom.xml文件配置2.3 生成二维码2.4 解析二维码三、Android端功能演示参考资料前言:本篇文章主要是在分析源代码之前,进行项目的调试运行,为接下来的代码分析做准备。本人主要负责二维码编码算法,因此,在此后的博客中,我将对package c
2021SC@SDUSC
目录
前言:本篇文章主要是在分析源代码之前,进行项目的调试运行,为接下来的代码分析做准备。本人主要负责二维码编码算法,因此,在此后的博客中,我将对package core中的代码进行详细分析。
一、项目打包
1.1 安装Maven
从官方下载安装包并解压。
下载地址:Maven – Download Apache Maven
配置环境变量。详细可看教程: maven安装及配置(详细版)
在命令行输入mvn -v ,出现如下信息则安装成功。
1.2 编译jar包
在命令行中打开Zxing源码的core文件夹,输入 mvn -DskipTests -Dgpg.skip=true install 命令。
等待一段时间,出现类似如下信息,则jar包编译成功。
可以在core文件夹下看到编译好的相应jar包。
javase等jar包的编译也是类似步骤。
二、在IDEA中生成与解析二维码
2.1 创建Maven项目
在IDEA中创建Maven项目,项目结构如下。
2.2 pom.xml文件配置
<dependencies>
<!--生成二维码必导的包-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.2</version>
<scope>system</scope>
<systemPath>D:/zxing-master/core/target/core-3.4.2-SNAPSHOT.jar</systemPath>
</dependency>
<!--解析二维码必导的包-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
2.3 生成二维码
//在指定路径生成一张二维码,内容类型为字符串,可以是普通文本或者是超链接
public class Encode{
//定义二维码的颜色
private static final int BLACK = 0xff000000;
//定义二维码的背景颜色
private static final int WHITE = 0xffffffff;
//二维码格式参数集合
private static final EnumMap<EncodeHintType,Object> hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
//静态代码块初始化参数,在类加载的时候就初始化,而且在类的生命周期内只初始化一次
static {
hints.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.L);
// 二维码边界空白大小:1,2,3,4(4为默认,最大)
hints.put(EncodeHintType.MARGIN,1);
//设置二维码存储内容的字符集
hints.put(EncodeHintType.CHARACTER_SET,"UTF-8");
}
public static void createZXingCodeSaveToDisk(String content,int width,int height,String savePath,String imageType){
try {
BitMatrix encode = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
//获得二维码的宽高
int codeWidth = encode.getWidth();
int codeHeight = encode.getHeight();
//创建图片
BufferedImage image = new BufferedImage(codeWidth, codeHeight, BufferedImage.TYPE_INT_RGB);
//把二维码里面的信息写到图片里面
for (int i = 0; i < codeWidth; i++) {
for (int j = 0; j < codeHeight; j++) {
image.setRGB(i,j,encode.get(i,j)?BLACK:WHITE);
}
}
//保存图片到指定位置
File file = new File(savePath);
if(!file.exists()){
//文件不存在则创建
file.createNewFile();
}
ImageIO.write(image,imageType,file);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//将字符串"I am FZJ"存储在二维码中
createZXingCodeSaveToDisk("I am FZJ",300,300,"d://name.jpg","JPEG");
//将我的博客地址存储在二维码中
createZXingCodeSaveToDisk("https://blog.csdn.net/m0_52100140",300,300,"d://blog.jpg","JPEG");
}
}
运行结果如下,可以使用微信扫一扫查看结果。
左侧二维码扫描结果为:I am FZJ
右侧二维码扫描后会跳转到本人博客页面
2.4 解析二维码
//该类主要解析二维码
public class Decode {
//二维码格式参数集合
private static final EnumMap<DecodeHintType,Object> hints = new EnumMap<DecodeHintType, Object>(DecodeHintType.class);
//设置解析二维码后信息的字符集
static {
hints.put(DecodeHintType.CHARACTER_SET,"UTF-8");
}
public static String decodeQRCodeForPath(String path){
//该文件对象映射二维码图片
File file = new File(path);
if(file.exists()){
try {
return decodeQRCodeStreamForStream(new FileInputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
}
return null;
}
public static String decodeQRCodeStreamForStream(InputStream ins) {
if(ins != null){
try {
//将读取二维码图片的流转为图片对象
BufferedImage image = ImageIO.read(ins);
BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);
HybridBinarizer binarizer = new HybridBinarizer(source);
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
MultiFormatReader reader = new MultiFormatReader();
Result result = reader.decode(binaryBitmap, hints);
//返回二维码中的文本内容
String content = result.getText();
return content;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
return null;
}
public static void main(String[] args) {
String myName = decodeQRCodeForPath("d:/name.jpg");
System.out.println(myName);
String myBlog = decodeQRCodeForPath("d:/blog.jpg");
System.out.println(myBlog);
}
}
运行结果如下:
三、Android端功能演示
1、在手机下载安装APP,程序主界面如下所示
2、功能展示
• 扫描条形码
• 扫描二维码
• 生成二维码(以我上一篇博客地址为例,可以使用微信扫一扫)
参考资料
更多推荐
所有评论(0)