java学习--简单二维码生成

1.二维码的概念

二维码是用某种特定的几何图形按一定规律在二维方向上分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现现信息自动处理。

2.生成二维码的原理

将数据信息转换为二进制码,并按一定规律将二进制码排列在图片上。若二进制值为0,则将对应位置填充白色,若二进制值为1,则将对应位置填充黑色。

如何将各种不同的数据转换为二进制呢,可以将数据转换为字符型变量,字符型变量可以转换为十进制,再由对应的十进制数转换为表示二进制的字符串。

如字符‘二’的十进制为20108,二进制为100111010001100将二进制转换为黑白条如下:

3.实现的功能

*创建一个窗体,实现交互,可以在输入框中输入想要二维化的字符串

*将输入字符串转换为二进制,并在运行结果框中分别输出其十进制和二进制

*根据每个字符的二进制值生成一列黑白条,并将所有条组成二维码

4.代码实现

4.1.创建窗体

    public QRCode() {
        setSize(800,800);
        setTitle("二维码生成");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        FlowLayout f1=new FlowLayout();
        setLayout(f1);

        JButton btn=new JButton("生成二维码");
        btn.addActionListener(lis);//lis为要添加的监听器
        JTextField jtf=new JTextField(50);
        add(jtf);
        add(btn);
        setVisible(true);
        lis.g=getGraphics();
        lis.text=jtf;
    }

 4.2.toBinary()方法

    public static String toBinary(int decimal){
        if(decimal==0){
            return "";
        }else{
            return toBinary(decimal/2)+decimal%2;
        }
    }

该方法将十进制数转换为二进制,对字符型数据同样适用,在运算中char型数据自动转换为int型。

4.3strToBinarys()方法

    public String[] strToBinarys(String str){
        String[] codeArr=new String[str.length()];
        for(int i=0;i<str.length();i++){
            char ch=str.charAt(i);//取出第i位字符
            int x=ch;//x为字符的十进制
            String binaryStr=toBinary(ch);
            //若不足八位则在二进制字符前补0
            while(binaryStr.length()<8){
                binaryStr="0"+binaryStr;
            }
            System.out.println(ch+"的十进制是:"+x+",二进制是"+binaryStr);//输出信息
            codeArr[i]=binaryStr;//将字符的第i位存储到字符数组的第i位
        }
        return codeArr;

    }

4.4.创建QRCodeListener监听器

public class QRCodeListener implements ActionListener {
    Graphics g;//画笔
    JTextField text;//窗体上文本框对象
    @Override
    public void actionPerformed(ActionEvent e) {
        String btnText=e.getActionCommand();//获取按钮文本
        String textStr=text.getText();//获取文本框文本
        if(btnText.equals("生成二维码")){
            String[] codeArr=strToBinarys(textStr);
            for(int i=0;i<codeArr.length;i++){
                for(int j=0;j<codeArr[i].length();j++){
                    char ch=codeArr[i].charAt(j);
                    //为0涂白,为1涂黑
                    if(ch=='0'){
                        g.setColor(Color.white);
                    }else if(ch=='1'){
                        g.setColor(Color.black);
                    }
                    g.fillRect(50+i*25,150+j*25,25,25);//一个黑白块边长为25
                }
            }
        }

    }
    //public static String toBinary(int decimal)
    //public String[] strToBinarys(String str)
}

 创建监听器,并将text,g对象传入监听器中。

        lis.g=getGraphics();
        lis.text=jtf;

5.运行结果

 

 运行后我们发现中文和英文生成的二维码长度不一样,这是因为中文大部分是占两个字节,需要16位二进制来表示,而英文字符只占一个字节,用8位二进制就足够表示。我们可以将strToBinarys()方法中binaryStr.length()<8改为所需的长texttext

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.山高人为峰.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值