ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021SC@SDUSC-Zxing(二):Zxing运行(Springboot)

2021-10-07 17:35:13  阅读:201  来源: 互联网

标签:Springboot new zxing 二维码 static import SDUSC Zxing com


2021SC@SDUSC

1.下载项目

网址为:Zxing
解压后,项目目录如下:
目录
各部分的介绍在上一篇博客中有提到:2021SC@SDUSC-Zxing(一):Zxing初步认识

2.core和javase打包

流程是一样的,但是注意要先打包core再打包javase

  • 第一步,win+R 输入cmd,打开命令提示框
  • 第二步,配置环境变量,在命令行输入 mvn -v命令,出现以下信息,则Maven安装成功
    在这里插入图片描述
  • 第三步,打开解压后的Zxing文件夹,打开core文件夹
    在这里插入图片描述
  • 第四步,输入 mvn -DskipTests -Dgpg.skip=true install 命令,需要等待一段时间,出现如下信息,则编译成功。
    在这里插入图片描述
    此时zxing核心包已经生成,生成的文件在core\target目录下
  • 第五步,用IDEA打开javase文件夹,会发现
    在这里插入图片描述
    26和27行的代码报错,这时候需要我们手动导入刚刚打包好的jar包。在使用Maven的时候,如果我们要依赖一个本地的jar包的时候,通常都会使用<scope>system</scope><systemPath></systemPath>来处理。
  • 第六步,在命令提示框中打开javase文件夹,输入 mvn -DskipTests -Dgpg.skip=true install 命令。和上面一样,出现BUILD SUCCESS则打包成功。

3.运行demo

  • 第一步,新建springboot项目,CSDN上有很多有关介绍,这里就不多赘述了
  • 第二步,打开pom.xml,在
    <dependencies></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>
  • 生成二维码的代码:
package com.example.zxingdemo.Try;


import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.EnumMap;

/**
 *  在指定路径生成一张二维码,内容类型为字符串,可以是普通文本或者是超链接
 *
 *  生成二维码的步骤
 *      1.根据Zxingjar包生成二维码,这只是生成二维码,并不是生成二维码图片
 *      2.创建一张图片,大小和二维码的大小一致。
 *      3.二维码可以看成是二维数组,所以遍历二维码,然后把二维码的每一个点添加到图片上,添加的时候,判断是黑色点,还是白色点。
 *          encode.get(i,j)?BLACK:WHITE
 *      4.最后把真正的二维码图片生成到指定路径即可。
 */
public class EncodeQRCode{

    //0x:代表是16进制,ff:代表完全不透明度,其余6位代表颜色值(000000:代表黑色)
    //定义二维码的颜色
    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 {
        /*
         *  二维码的纠错级别(排错率),4个级别: L(7%)、M(15%)、Q (25%)、H(30%)
         *  最高级别为:H
         *  纠错信息同样存储在二维码中,纠错级别越高,纠错信息占用的空间越多,那么能存储的有用信息就越少;
         */
        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);
            //打印一句话,给个提示是否成功
            System.out.println("二维码生成成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        //将我的博客地址存储在二维码中
        createZXingCodeSaveToDisk("https://blog.csdn.net/weixin_45883443",300,300,"D://myBlog.jpg","JPEG");
    }
}

生成二维码如下:
在这里插入图片描述
图片保存在了D盘:
在这里插入图片描述

  • 解析二维码的代码:
package com.example.zxingdemo.Try;


import com.google.zxing.*;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.EnumMap;

/**
 *  该类主要解析二维码
 *      步骤:
 *          1.读取二维码图片
 *          2.读取二维码图片中的二维码
 *          3.读取二维码中的信息
 */
public class DecodeQRCode {

    //二维码格式参数集合
    private static final EnumMap<DecodeHintType,Object> hints = new EnumMap<DecodeHintType, Object>(DecodeHintType.class);

    static {
        //设置解析二维码后信息的字符集
        hints.put(DecodeHintType.CHARACTER_SET,"UTF-8");
    }

    /**
     *  解析二维码
     * @param path 二维码图片路径
     * @return 二维码中的文本内容
     */
    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;
    }

    /**
     *  解析二维码
     * @param ins 读取二维码图片的流
     * @return 二维码中的文本内容
     */
    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();
                System.out.println("二维码解析成功");
                return content;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        return null;
    }

    /**
     *  主方法测试二维码解析
     * @param args
     */
    public static void main(String[] args) {
        String myBlog = decodeQRCodeForPath("D:/myBlog.jpg");
        System.out.println(myBlog);
    }
}

运行结果如图
在这里插入图片描述
参考博客:
Springboot如何引入本地jar包
Java用ZXing的方式生成与解析二维码
Zxing源码编译与运行

标签:Springboot,new,zxing,二维码,static,import,SDUSC,Zxing,com
来源: https://blog.csdn.net/weixin_45883443/article/details/120621388

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有