[二维码生成和解析][Java]

首先必须的jar包文件:百度云盘下载

 

Qrcode.jar    Qrcode_Swetake.jar 这两个就是我们的主角

学习之前可以简单了解一下:二维码原理

新建JavaProject    新建lib文件夹

将jar文件复制进去,选中jar文件右键BuildPath -- Add to BuildPath (旁白:这么简单的操作你都还要讲!)

进入正题:

 

代码如下:    为方面同学理解 注释较多 请理解  如感不适  请见谅 

(旁白:废话太多了 我要看代码!)

生成Qrcode代码:

新建 QrcodeDemo.java

package qrcode;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;

public class QrcodeDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        Qrcode qrcode=new Qrcode();
        //二维码包含:数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误)
        //格式信息:表示改二维码的纠错级别,分为L、M、Q、H
        //错误修正容量
        //L水平   7%的字码可被修正
        //M水平   15%的字码可被修正
        //Q水平   25%的字码可被修正
        //H水平   30%的字码可被修正
        //Qrcode有容错能力,Qrcode图形如果有破损,仍然可以被读取内容,最高可以到30%面积破损仍可被读取。
        //相对而言,容错率愈高,Qrcode图形面积愈大。
        //所以一般折衷使用15%容错能力 - ‘M‘
        qrcode.setQrcodeErrorCorrect(‘M‘);

        //B 以2进制形式 进行信息存储
        qrcode.setQrcodeEncodeMode(‘B‘);

        //设置Qrcode版本
        //QR码符号共有40种规格的矩阵(一般为黑白色)
        //从21x21(版本1),到177x177(版本40)
        //每一版本符号比前一版本 每边增加4个模块
        //常用版本为7 如支付宝版本
        qrcode.setQrcodeVersion(7);

        //创建图片的存储空间 - 流空间
        BufferedImage img=new BufferedImage(140,140,BufferedImage.TYPE_INT_RGB);//常量 8位 颜色的图片
        //画笔工具
        Graphics2D g=img.createGraphics();
        g.setBackground(Color.white);
        g.clearRect(0, 0, 140, 140);
        g.setColor(Color.black);

        File file=new File("/Users/Summer/Desktop/二维码.png");

        //数据信息
        String str="http://www.baidu.com";
        byte[] data =str.getBytes();

        //生成的cal
        boolean[][] qrcodeDate=qrcode.calQrcode(data);

        // 设置偏移量 不设置可能导致解析出错
        int offset=2;
        for (int i = 0; i < qrcodeDate.length; i++) {
            for (int j = 0; j < qrcodeDate.length; j++) {
                /* 必须做判定 判定为true的部分进行打印*/
                if(qrcodeDate[j][i]){//注意j i的位置  否则可能导致后续无法解析

                    //主意j i的位置 防止绘制错误
                    g.fillRect(j*3+offset,i*3+offset,3,3);
                /*
                 * 以下尺寸合适,二维码居中
                 * 100*100 (j*2+5,i*2+5,3,3)
                 * 140*140 (j*3+2,i*3+2,3,3)
                 * 300*300 (j*6+15,i*6+15,6,6);
                 */
                }
            }
        }
        //刷新
        img.flush();
        //释放资源
        g.dispose();
        try {
            //流写入文件
            ImageIO.write(img,"png",file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

QrcodeDemo.java

解析Qrcode:

新建 DecodeDemo.java 

package qrcode;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;

public class DecodeDemo {
    public static void main(String[] args) {
        BufferedImage img = null;
        try {
            //读取到流中..
            img = ImageIO.read(new File("/Users/Summer/Desktop/2维码.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //QRCodeDecoder对象 进行解析操作
        QRCodeDecoder qrcodeDecoder = new QRCodeDecoder();
        //读取数据 byte[]
        //注意该方法参数 需要QRCodeImage对象 自己写对象实现和重写
        byte[] decodeByte = qrcodeDecoder.decode(new qrcodeImg(img));
        String s  = new String(decodeByte);
        System.out.println(s);
    }
}
//实现QRCodeImage
class qrcodeImg implements QRCodeImage {
    public BufferedImage img;

    public qrcodeImg(BufferedImage img) {
        this.img = img;
    }

    @Override
    public int getHeight() {
        return img.getHeight();
    }

    @Override
    public int getPixel(int x, int y) {
        return img.getRGB(x, y);
    }

    @Override
    public int getWidth() {
        return img.getWidth();
    }
}

DecodeDemo.java

当然大家也可以提取成工具类 (工具类:方便工作时随意复制粘贴)

时间: 2024-10-13 04:47:49

[二维码生成和解析][Java]的相关文章

java zxing实现二维码生成和解析zxing实现二维码生成和解析

zxing实现二维码生成和解析 二维码 zxing 二维码的生成与解析.有多种途径.我选择用大品牌,google老大的zxing. gitHub链接是(我用的3.0.0,已经是nio了) https://github.com/zxing/zxing/tree/zxing-3.0.0 Java代码   // 其中输出图像和读取图像的类在core包 MultiFormatReader MultiFormatWriter // 生成矩阵的类在javase的包里 MatrixToImageWriter

zxing实现二维码生成和解析

zxing实现二维码生成和解析 博客分类: 二维码 zxing 二维码的生成与解析.有多种途径.我选择用大品牌,google老大的zxing. gitHub链接是(我用的3.0.0,已经是nio了) https://github.com/zxing/zxing/tree/zxing-3.0.0 Java代码   // 其中输出图像和读取图像的类在core包 MultiFormatReader MultiFormatWriter // 生成矩阵的类在javase的包里 MatrixToImageW

java二维码生成与解析代码实现

二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍. 2.  编码范围广 该条码可以把图片.声音.文字.签字.指纹等可以数字化的信息进行编码,用条码表示出来:可以表示多种语言文字:可表示图像数据. 3.  容错能力强,具有纠错功能 这使得二维条码因穿孔.污损等引起局部损坏时,照样可以正确

[转]java二维码生成与解析代码实现

转载地址:点击打开链接 二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 二维码的特点: 1.  高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍. 2.  编码范围广 该条码可以把图片.声音.文字.签字.指纹等可以数字化的信息进行编码,用条码表示出来:可以表示多种语言文字:可表示图像数据. 3.  容错能力强,具有纠错功能 这使得二维条码因穿孔.污损等引起

二维码生成工具类java版

注意:这里我不提供所需jar包的路径,我会把所有引用的jar包显示出来,大家自行Google package com.net.util; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; import java.a

二维码生成与解析代码实现

二维码,是一种采用黑白相间的平面几何图形通过相应的编码算法来记录文字.图片.网址等信息的条码图片.如下图 一.Java 所需jar包:QRCode.jar http://download.csdn.net/detail/wangpeng047/4008532 TwoDimensionCode类:二维码操作核心类 [java] view plaincopy package qrcode; import java.awt.Color; import java.awt.Graphics2D; impo

Android 开发中使用到二维码生成和解析

二维码生成 二维码解析 在项目的开发中, 使用二维码作为数据传递 交换 已经是常态了! 在这我也讲讲自己在项目开发中使用到的二维码. 生成二维码的开发流程 1 应用google 给我们提供的zxing.jar (建议官网下载) 2 使用zxing.jar 的MultiFormatWriter 类 生成一张二维码图片 核心代码块 /** * 方法说明:生成无图片二维码 */ @SuppressWarnings("unused") private Bitmap createTwoCode(

Java条形码/二维码生成和解析

注意-本类依赖jar包文件:core.jar和zxing-javase.jar 下载jar文件,到本博客文件栏目下载. import com.google.zxing.BarcodeFormat; import com.google.zxing.Binarizer; import com.google.zxing.BinaryBitmap; import com.google.zxing.DecodeHintType; import com.google.zxing.EncodeHintType

QRcode二维码 生成与解析

import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcod