Fork me on GitHub

生成解析二维码

什么是QR码?

QR码是二维条码的一种,1994年由日本Denso-Wave公司发明。QR来自英文“Quick Response”的缩写,即快速反应的意思,源自发明者希望QR码可让其内容快速被解码。QR码最常见于日本,并为目前日本最流行的二维空间条码。QR码比普通条码可储存更多资料,亦无需像普通条码般在扫描时需直线对准扫描器。

二维码

二维码的生成与解析有多种途径。这里我用的是google的zxing(绘制和识别二维码的jar包)。

  • Zxing是Google提供的关于条码(一维码、二维码)的解析工具,提供了二维码的生成与解析的方法
  • ZXing (Zebra Crossing)是一个开源的,支持多种格式的条形码图像处理库,使用java实现,同时为其他语言提供接口。使用该类库可以方便地实现二维码图像的生成和解析。

    代码实现

    闲话不多说,先贴代码:
    包结构:

    QRCodeTest类:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    package yh.test;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.Path;
    import java.util.HashMap;
    import java.util.Map;
    import javax.imageio.ImageIO;
    import org.junit.Test;
    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;
    import com.google.zxing.LuminanceSource;
    import com.google.zxing.MultiFormatReader;
    import com.google.zxing.MultiFormatWriter;
    import com.google.zxing.NotFoundException;
    import com.google.zxing.Result;
    import com.google.zxing.WriterException;
    import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
    import com.google.zxing.client.j2se.MatrixToImageWriter;
    import com.google.zxing.common.BitMatrix;
    import com.google.zxing.common.HybridBinarizer;
    public class QRCodeTest {
    /**
    * 生成图像
    */
    @Test
    public void testEncode() {
    // 二维码图片存放位置
    String filePath = "E://";
    // 二维码图片的名字
    String fileName = "zxing.jpg";
    // 内容
    String content = "测试";
    // 图像宽度
    int width = 400;
    // 图像高度
    int height = 400;
    // 图像类型
    String format = "jpg";
    Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
    // 内容所使用编码
    hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
    try {
    // 生成矩阵
    BitMatrix bitMatrix = new MultiFormatWriter().encode(content,
    BarcodeFormat.QR_CODE, width, height, hints);
    Path path = FileSystems.getDefault().getPath(filePath, fileName);
    // 输出图像
    MatrixToImageWriter.writeToPath(bitMatrix, format, path);
    } catch (WriterException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    System.out.println("二维码生成了");
    }
    /**
    * 解析图像
    */
    @Test
    public void testDecode() {
    //解析的图像的路径
    String filePath = "E://zxing.jpg";
    BufferedImage image;
    try {
    image = ImageIO.read(new File(filePath));
    LuminanceSource source = new BufferedImageLuminanceSource(image);
    Binarizer binarizer = new HybridBinarizer(source);
    BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
    Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
    hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
    Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码
    System.out.println("解析结果 = " + result.toString());
    System.out.println("二维码格式类型 = " + result.getBarcodeFormat());
    System.out.println("二维码文本内容 = " + result.getText());
    } catch (IOException e) {
    e.printStackTrace();
    } catch (NotFoundException e) {
    e.printStackTrace();
    }
    }
    }

pom.xml

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.1.0</version>
</dependency>

注:上述代码需要JDK7支持

下方图片红框内是你要转化为二维码的内容(我写的是”测试”);

将刚刚生成的二维码图片进行解析;结果如下:

如果是一个url;用微信扫一扫会转到对应的网站;比如我的博客:http://yanghuii.com

使用zxing

下载 zxing 的源代码。你需要用下载的源代码来编译出两个jar:
core-3.2.1.jar
javase-3.2.1.jar
你需要把 core.jar 和 javase.jar 添加到你项目的 classpath 中,然后你可以调用 zxing 的 API 了。

项目地址

项目地址在这里

「真诚赞赏,手留余香」