目录

1.创建路径以存储图片

2.二维码保存

2.1.代码完善

2.2.运行结果

3.二维码读取 

 3.1.功能要求

3.2.代码


上一篇博客中介绍了二维码的生成原理,那么怎么将二维码保存到电脑中并能够识别呢

通过这篇博客我们学习如何将我们生成的二维码保存并识别。

1.创建路径以存储图片

我们可以在项目下创建一个Directory文件以方便在代码中保存和读取图片

如何让用户扫指定二维码并添加企业微信 java实现 java扫二维码获取数据_二维码

 这里将其命名为img,我们可以将电脑中的图片复制到该文件下,也可以在代码中将该路径作为保存图片或读取图片的地址

如何让用户扫指定二维码并添加企业微信 java实现 java扫二维码获取数据_java_02

 

如何让用户扫指定二维码并添加企业微信 java实现 java扫二维码获取数据_学习_03

 通过以上步骤可以快速获取图片地址并调用

2.二维码保存

2.1.代码完善

public void actionPerformed(ActionEvent e) {
        String btnText=e.getActionCommand();//获取按钮文本
        String textStr=text.getText();获取输入框文本
        if(btnText.equals("生成二维码")){
            String[] codeArr=strToBinarys(textStr);
            BufferedImage img=new BufferedImage(codeArr.length*25,16*25,2);
            Graphics bg=img.getGraphics();
            for(int i=0;i<codeArr.length;i++){
                for(int j=0;j<codeArr[i].length();j++){
                    char ch=codeArr[i].charAt(j);
                    if(ch=='0'){
                        bg.setColor(Color.white);
                    }else if(ch=='1'){
                        bg.setColor(Color.black);
                    }
                    bg.fillRect(i*25,j*25,25,25);
                }
            }
            //将二维码的边框标红
            g.setColor(Color.red);
            g.fillRect(99,99,img.getWidth()+2,img.getHeight()+2);
            g.drawImage(img,100,100,null);
            try {
                ImageIO.write(img, "PNG", new File("img/qrcode.png"));//将图片保存到指定路径
            } catch (IOException m) {
                throw new RuntimeException(m);
            }
        }


2.2.运行结果

如何让用户扫指定二维码并添加企业微信 java实现 java扫二维码获取数据_学习_04

如何让用户扫指定二维码并添加企业微信 java实现 java扫二维码获取数据_学习_05

3.二维码读取 

 3.1.功能要求

*从给定路径读取图片,并保存在数组中

*从数组中遍历像素值,并将黑白像素值转换为10,存储在二进制字符串中

*将二进制字符串中的二进制码码转换为字符串并输出

3.2.代码

package com.lht1220;

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

public class QRCodeReader {


    public void getImagePixels(String path){
        File file=new File(path);
        try {
            BufferedImage img= ImageIO.read(file);//加载图片
            int w=img.getWidth();//宽度
            int h=img.getHeight();//高度
            int size=h/16;//根据高度/每个字符16位二进制码得到每个黑白方框的边长
            int strLength=w/size;//图片宽度/边长得到字符串长度
            int[][] arr=new int[w][h];//创建二维数组存储图片各像素像素值
            //遍历像素
            for(int i=0;i< arr.length;i++){
                for(int j=0;j<arr[0].length;j++){
                    arr[i][j]=img.getRGB(i,j);
                }
            }
            String codeStr="";//存储二进制字符串
            //根据黑白方块的边长读取每个黑白方块的像素值
            for(int i=size/2;i< arr.length;i+=size){
                for(int j=size/2 ;j<arr[0].length;j+=size){
                    int rgb=arr[i][j];
                    int red=(rgb>>16)&255;
                    int green=(rgb>>8)&255;
                    int blue=rgb&255;
                    int gray=(red+green+blue)/3;//计算灰度值
                    if(gray<255/2){
                        codeStr+='1';//偏黑标记为1
                    }else{
                        codeStr+='0';
                    }
                }
            }
            String str="";//存储二维码结果的字符串
            String str16="";//存储每个字符二进制编码的字符串
            //遍历二进制字符串
            for(int i=0;i<codeStr.length();i++){
                char ch=codeStr.charAt(i);//取出01字符
                str16+=ch;//存入
                //如果str16中存入16个01字符,则将其转为字符并存入str中
                if(i!=0&&i%16==15){
                    int bi=Integer.parseInt(str16,2);//将字符串格式转为二进制格式
                    str+=(char)bi;//将二进制转为字符
                    str16="";//清空以便处理下一个字符
                }
            }
            System.out.println(str);//输出结果
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

    public static void main(String[] args) {
        new QRCodeReader().getImagePixels("img/qrcode.png");
    }
}

 3.3.运行结果

如何让用户扫指定二维码并添加企业微信 java实现 java扫二维码获取数据_字符串_06

读取二维码中数据并输出