1. 程式人生 > >Java 騷操作--生成二維碼

Java 騷操作--生成二維碼

comm ron 速度 top 傳統 第一個 ack data- esp

好久沒發布博客了,今天發了一個Java工具類,突然發現草稿箱竟然還有以前的存貨,一次性發了!!!

目錄 1.二維碼概念 2.二維碼發展歷史 3.二維碼分類 4.二維碼優缺點 5.QR Code

1.二維碼又稱 二維條碼 (2-dimensional bar code)是用某種特定的幾何圖形按一定規律在平面(二維碼上)分布的黑白相間的圖形記錄數據符號信息的圖形。

2二維碼發展歷史

1.20世紀20年代 約翰 科芒德實現郵政單據自動分揀方法,

2.1949年美國喬 伍德蘭德 伯尼西爾沃發明第一個條碼專利,

3.1959年 吉拉德 費伊塞爾申請了用條形碼表示數字的專利,

4.60年代 西爾沃尼亞發明一套條形碼系統並在北美鐵路系統成功應用,

5.70年代,UPC(Universal Product Code)在北美超市得到廣泛應用,

6.1988年中國成立了中國物品編碼中心,80年代未國外研制出二維碼,

7.1997年到2000年確定了國家標準

3.二維碼分類

技術分享圖片

1. 一維條碼是由一組粗細不同,黑白(或彩色)相間的條,空及其相符的字符(數字字母)組成的標記,即傳統條碼。

技術分享圖片

2. 二維條碼是用某種特定的幾何圖形按一定規律在平面(二維碼上上分布的條,空間的圖形來記錄數據符號信息

二維條碼也有許多不同的碼制,就碼制的編碼原理而言,通常分為三種


類型:
1.線性堆疊式二維碼

編碼原理: 建立在一維條碼基礎上,按需要堆積成兩行或多行。

技術分享圖片


2.矩陣式二維碼

在一個矩形空間通過黑,白像素在矩陣中的不同分布進行編碼的出現表示二進制“1”點的不出現表示二進制的“0”

技術分享圖片


3.郵政碼

郵政碼通過不同長度的條進行編碼,主要用於郵件編碼,
POSTNET、
BPO 4-STATE。

4. 二維碼優缺點

技術分享圖片

技術分享圖片

5. QR Code

目前流行的三大國標準:

PDE417:不支持中文

DM:專利未公開,需要支付專利費用

QR Code:專利公開,支持中文

QR Code比其他二維碼相比,具有識讀速度快,數據度大,占用空間小的優勢。

QR Code 是由日本Denso公司於1994年研制的一種矩陣二維碼符號碼,全稱是Quick Response Code

技術分享圖片

糾錯能力

L: 約可糾錯7%的數據碼字M: 約可糾錯15%的數據碼字Q: 約可糾錯25%的數據碼字H: 約可糾錯30%的數據碼字

技術分享圖片

6. 二維碼制作:Java語言開發

首先引入zxing的jar包

技術分享圖片

jar包:鏈接:https://pan.baidu.com/s/1GzjQOqWhZYPsL0uzf569dw 密碼:kril

詳細操作:

package cn.code;

import java.io.File;
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.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 
 * @author: 房上的貓
 * 
 * @time: 下午11:38:45
 * 
 * @博客地址: https://www.cnblogs.com/lsy131479/
 *
 *        生成二維碼
 */

public class Zxing {
    public static void main(String[] args) {
        Zxing zxing = new Zxing();

        // 傳參:二維碼內容和生成路徑
        if (zxing.orCode("https://www.cnblogs.com/lsy131479/", "F:\\1.jpg")) {
            System.out.println("ok,成功");
        } else {
            System.out.println("no,失敗");
        }
    }

    private boolean orCode(String content, String path) {
        /*
         * 圖片的寬度和高度
         */
        int width = 300;
        int height = 300;
        // 圖片的格式
        String format = "png";
        // 二維碼內容
        // String content = "hello,word";

        // 定義二維碼的參數
        HashMap hints = new HashMap();
        // 定義字符集編碼格式
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
        // 糾錯的等級 L > M > Q > H 糾錯的能力越高可存儲的越少,一般使用M
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        // 設置圖片邊距
        hints.put(EncodeHintType.MARGIN, 2);

        try {
            // 最終生成 參數列表 (1.內容 2.格式 3.寬度 4.高度 5.二維碼參數)
            BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
            // 寫入到本地
            Path file = new File(path).toPath();
            MatrixToImageWriter.writeToPath(bitMatrix, format, file);
            return true;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }

    }

}

二維碼生成還有其他方式生成,今天這裏將不再講解,如果有興趣的可以關註一下作者,後續會持續出教程的

  其他方式:

    1.or code 生成及解析

    2.jQuery-qrcode 生成及解析

Java 騷操作--生成二維碼