初级(上) 二维码的生成

来源:互联网 发布:qq聊天记录查看软件 编辑:程序博客网 时间:2024/05/17 21:42

吼吼,阳仔的第一篇博客开写啦,以下的内容都是我从imooc上面听课的总结,当然是只针对二维码,作为一个初级程序媛,也是要坚持学习的。

首先,谢谢imooc网上的老师发放的免费视频,让我自己有了一些简单的了解,

接下来,就把我的总结贴出来吧:

第一

    二维码的分类:
        线性堆叠式二维码:建立在一条维码基础之上,按需要堆积成两条或多条,主要有:pdf417 ultraclode code 49  code16k
        矩阵式二维码:QRCode(最长用到的)
        邮政码
为什么QRCode是最长用到的呢?
下面举些常用的二维码格式进行对比:
     PDF417:不支持中文
     DM:专利未公开,需支付专利费用
     QR code:专利公开,支持中文。
                优点:与其他二维码相比,识读速度快,数据密度大,占用空间小的优势。
接下来介绍一下QRCode:
QR Code 是由日本Denso公司于1994年研制的一种矩阵二维码符号码,
                全称是:quick response code 
                纠错能力有4级:L级:约可纠错7%的数据码字
                                            M级:15%
                                            Q级:25%
                                            H级:30%
                    纠错能力越高,可存储的就越少
生成二维码的三种方式:
01:
借助第三方jar:zxing(谷歌研发的)和qrcodejar
            实例:   https://github.com/zxing/
            下载源码

01.01提取zxing-zxing-3.3.0 中core包和javase包中的com文件夹下的内容,
有很多android的文件夹,可以不用管,忽略。因为,咱主要不是那个方向的


01.02 eclipse新建java project 命名为zxing(这个当然是自己想取什么就取什么名字)
src目录下面将zxing-zxing-3.3.0 中core包和javase包中的com文件夹下的内容放了进去

01.03 将zxing项目导出jar包

01.04  新建java project   并将之前打的zxing.jar放入其中

01.05
接下来开始编码啦:
生成二维码
package com.imooc.zxing;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.nio.file.Path;
import java.util.HashMap;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 生成二维码
 *
 * @author yuliyang
 * @version $Id: CreateQRCode.java, v 0.1 2016年11月13日 下午1:26:37 阳仔 Exp $
 */
public class CreateQRCode {
    public static void main(String[] args) throws UnsupportedEncodingException {
        int width =300;
        int height = 300;
        //图片格式
        String format = "png";
        //内容
        String content = "www.baidu.com";
        //定义二维码
        HashMap map = new HashMap();
        //字符
        map.put(EncodeHintType.CHARACTER_SET, "gb2312");
        //纠错能力
        map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        //边框大小
        map.put(EncodeHintType.MARGIN, 2);
        
        //开始生成
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(
                content, BarcodeFormat.QR_CODE, width, height);
            File file = new File("D:/zxingimg/img1.png");
            //如果文件不存在,则创建
            if(!file.exists()){
                file.mkdirs();
            }
            MatrixToImageWriter.writeToFile(bitMatrix, format, file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
直接运行之后,在你的D:/zxingimg 目录下面就会看见img.png 了,拿出手机扫一扫,就可以了
是不是超级简单。。。。
二:我们还可以解析二维码:
package com.imooc.zxing;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;

import javax.imageio.ImageIO;

import com.google.zxing.Binarizer;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.BitArray;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
/**
 * 解析二维码图片
 *
 * @author yuliyang
 * @version $Id: ReadQRCode.java, v 0.1 2016年11月13日 下午2:19:38 阳仔 Exp $
 */
public class ReadQRCode {
    public static void main(String[] args) {
        try {
        MultiFormatReader formatReader = new MultiFormatReader();
        //获取二维码图片
        File file = new File("D:/zxingimg/qrcode1.png");
        BufferedImage image = ImageIO.read(file);
        BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
            new BufferedImageLuminanceSource(image)));
        HashMap hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        Result result = formatReader.decode(binaryBitmap, hints);
        System.out.println("解析结果:"+result.toString());
        System.out.println("二维码格式类型:"+result.getBarcodeFormat());
        System.out.println("二维码文本内容:"+result.getText());
        } catch (Exception e) {
           e.printStackTrace();
        }
        
    }
}
解析结果:


ok 到现在为止,第一种方法就成功啦!!!




0 0
原创粉丝点击