最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)二維碼、條形碼功能(案例代碼)

 更新時(shí)間:2024年01月02日 09:48:58   作者:何蘇三月  
ZXing是一個(gè)開(kāi)放源碼的,用Java實(shí)現(xiàn)的多種格式的1D/2D條碼圖像處理庫(kù),它包含了聯(lián)系到其他語(yǔ)言的端口,Zxing可以實(shí)現(xiàn)使用手機(jī)的內(nèi)置的攝像頭完成條形碼的掃描及解碼,這篇文章主要介紹了Java實(shí)現(xiàn)二維碼、條形碼等功能,需要的朋友可以參考下

一、Zxing介紹

        ZXing是一個(gè)開(kāi)放源碼的,用Java實(shí)現(xiàn)的多種格式的1D/2D條碼圖像處理庫(kù),它包含了聯(lián)系到其他語(yǔ)言的端口。Zxing可以實(shí)現(xiàn)使用手機(jī)的內(nèi)置的攝像頭完成條形碼的掃描及解碼。

二、關(guān)鍵類(lèi)及方法說(shuō)明

        Zxing將生成圖形編碼的方式抽象成了一個(gè)類(lèi)com.google.zxing.Writer, 在實(shí)現(xiàn)類(lèi)中不僅僅生成二維碼,還可以生成條形碼等其他圖形編碼。

我們實(shí)際開(kāi)發(fā)中,可以選擇Writer類(lèi)的實(shí)現(xiàn)類(lèi)MultiFormatWriter。

參數(shù)

參數(shù)說(shuō)明
String contents編碼的內(nèi)容
BarcodeFormat format編碼的方式(二維碼、條形碼...)
int width生成的碼的寬度
int height生成的碼的高度
Map<EncodeHintType,?> hints編碼時(shí)額外的參數(shù)

 額外參數(shù)說(shuō)明

        編碼額外的參數(shù)是以一個(gè)Map<EncodeHintType, ?>存在的,key為EncodeHintType枚舉,那么可以看到所有的參數(shù)類(lèi)型。

參數(shù)說(shuō)明
ERROR_CORRECTION容錯(cuò)率,指定容錯(cuò)等級(jí),例如二維碼中使用的ErrorCorrectionLevel, Aztec使用Integer
CHARACTER_SET編碼集
DATA_MATRIX_SHAPE指定生成的數(shù)據(jù)矩陣的形狀,類(lèi)型為SymbolShapeHint
MARGIN生成條碼的時(shí)候使用,指定邊距,單位像素,受格式的影響。類(lèi)型Integer, 或String代表的數(shù)字類(lèi)型
PDF417_COMPACT指定是否使用PDF417緊湊模式(具體含義不懂)類(lèi)型Boolean
PDF417_COMPACTION指定PDF417的緊湊類(lèi)型
PDF417_DIMENSIONS指定PDF417的最大最小行列數(shù)
AZTEC_LAYERSaztec編碼相關(guān),不理解
QR_VERSION指定二維碼版本,版本越高越復(fù)雜,反而不容易解析

從上面的參數(shù)表格可以看出,適用于二維碼的有:ERROR_CORRECTIONCHARACTER_SETMARGINQR_VERSION。

參數(shù)使用說(shuō)明
ERROR_CORRECTION分為四個(gè)等級(jí):L/M/Q/H, 等級(jí)越高,容錯(cuò)率越高,識(shí)別速度降低。例如一個(gè)角被損壞,容錯(cuò)率高的也許能夠識(shí)別出來(lái)。通常為H
CHARACTER_SET編碼集,通常有中文,設(shè)置為 utf-8
MARGIN默認(rèn)為4, 實(shí)際效果并不是填寫(xiě)的值,一般默認(rèn)值就行
QR_VERSION通常不變,設(shè)置越高,反而不好用

代碼演示

下面是最簡(jiǎn)化的生成二維碼的代碼:

/**
 * 生成二維碼
 *
 * @param contents 二維碼內(nèi)容
 * @return 二維碼的描述對(duì)象 BitMatrix
 * @throws WriterException 編碼時(shí)出錯(cuò)
 */
private BitMatrix encode(String contents) throws WriterException {
    final Map<EncodeHintType, Object> hints = new HashMap<>();
    hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
    hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
    return new QRCodeWriter().encode(contents, BarcodeFormat.QR_CODE, 320, 320, hints);
}

沒(méi)錯(cuò),就是這么簡(jiǎn)單。但是我們得到的是一個(gè)BitMatrix, 如果需要顯示出來(lái)則要根據(jù)不同平臺(tái)來(lái)處理。

BitMatrix 轉(zhuǎn)換成圖片

首先明確Java SE平臺(tái)和Android平臺(tái)的區(qū)別:Android平臺(tái)移除關(guān)于swing部分的代碼,所以如果SE平臺(tái)使用到這部分代碼,Android平臺(tái)則不能用,不幸的是,官方的代碼恰恰用到了這部分。

明確另外一個(gè)概念:圖片在一個(gè)平臺(tái)的存在形式有兩種,內(nèi)存和文件。雖然文件在不同平臺(tái)通用,但是轉(zhuǎn)換成文件的過(guò)程卻不是通用的。如Android中將Bitmap轉(zhuǎn)換成圖片文件,SE中將BufferedImage轉(zhuǎn)換成圖片文件。所以實(shí)際上,最重要的是將BitMatrix轉(zhuǎn)換成在內(nèi)存中圖片的存在形式。

Java SE平臺(tái)

BitMatrix轉(zhuǎn)換成BufferedImage.

在官方提供的zxing-javase包中已經(jīng)有了相應(yīng)的方法。下面是示例代碼:

BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, new MatrixToImageConfig(Color.BLACK.getRGB(), Color.WHITE.getRGB()));

其他就不過(guò)多介紹了,下面我們實(shí)際代碼完整演示一遍。

三、完整代碼演示

3.1 導(dǎo)入依賴(lài)

<!-- zxing生成二維碼 -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.3</version>
</dependency>

3.2 代碼示例

package com.pink.jucstudy.utils;
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;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
public class CodeX {
    /**
     * 1. 設(shè)置二維碼的參數(shù)
     * 2. 生成二維碼
     * 3. 將二維碼導(dǎo)出
     */
    /**
     *
     * @param content 編碼的內(nèi)容
     * @param path 本地保存的路徑
     * @return
     */
    public boolean createCode(String content,String path){
        // 1 設(shè)置基本參數(shù)
        int width = 300;
        int height = 300;
        String format = "png";//保存圖片的格式,注意:不同平臺(tái)可能有它的圖片格式要求
        // 2 設(shè)置額外參數(shù),一定要保存到map集合中
        Map map = new HashMap();
        // 2.1 設(shè)置容錯(cuò)率
        // 其中key鍵就是EncodeHintType.ERROR_CORRECTION
        // value值也是枚舉類(lèi)ErrorCorrectionLevel.M,可自行選擇容錯(cuò)率等級(jí)l>M>Q>H
        // 當(dāng)?shù)燃?jí)越高,掃描所需的時(shí)間越高,但是準(zhǔn)確率越高。
        map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
        // 2.2 生成條碼的時(shí)候使用,指定邊距,單位像素
        map.put(EncodeHintType.MARGIN,2);
        // 2.3 設(shè)置字符集
        map.put(EncodeHintType.CHARACTER_SET,"utf-8");
        // 3 生成二維碼
        // MultiFormatWriter繼承了Writer
        // 通過(guò)該對(duì)象的encode方法即可生成二維碼BitMatrix
        // 該方法形參分別對(duì)應(yīng)了:
        // 第一個(gè)參數(shù)為編碼的內(nèi)容,
        // 第二個(gè)參數(shù)選擇生成編碼為二維碼
        // 第三第四分別對(duì)應(yīng)編碼的寬度和高度
        // 第五個(gè)參數(shù)為對(duì)應(yīng)的額外參數(shù)
        // 然后需要try、catch拋出異常
        try {
            BitMatrix encode = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, map);
            // 4 導(dǎo)出到本地
            File file = new File(path);
            Path path1 = file.toPath();
            System.out.println(path1);
            MatrixToImageWriter.writeToPath(encode,format,path1);
            return true;
        } catch (WriterException | IOException e) {
            e.printStackTrace();
        }
        return false;
    }
    public static void main(String[] args) {
        boolean code = new CodeX().createCode("夏至小姐姐,留個(gè)微信唄", "E:\\xx\\2.png");
        if (code){
            System.out.println("成功");
        }else {
            System.out.println("失敗了");
        }
    }
}

3.3 運(yùn)行測(cè)試

 3.4 測(cè)試Springboot生成二維碼并回顯到頁(yè)面上

    @GetMapping("/qrcode")
    public void qrcodeTest(HttpServletResponse response) throws WriterException, IOException {
        ServletOutputStream outputStream = response.getOutputStream();
        int width = 300;
        int height =300;
        String format = "png";
        HashMap<EncodeHintType, Object> map = new HashMap<>();
        map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        map.put(EncodeHintType.CHARACTER_SET,"utf-8");
        String content = "今年是兔年,兔飛猛進(jìn)!豬兔猛進(jìn)!";
        BitMatrix encode = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, map);
        MatrixToImageWriter.writeToStream(encode,format,outputStream);
        System.out.println("成功!");
    }

 3.5 如果希望用html頁(yè)面的方式展示再寫(xiě)頁(yè)面即可

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>首頁(yè)</title>
</head>
<body>
    <h5>掃碼獲取信息</h5>
    <img src="/qrcode">
</body>
</html>

到此這篇關(guān)于Java實(shí)現(xiàn)二維碼、條形碼等功能的文章就介紹到這了,更多相關(guān)java二維碼條形碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java反射機(jī)制原理、Class獲取方式以及應(yīng)用場(chǎng)景詳解

    Java反射機(jī)制原理、Class獲取方式以及應(yīng)用場(chǎng)景詳解

    反射機(jī)制是JAVA的核心知識(shí)點(diǎn)之一,大多數(shù)框架的實(shí)現(xiàn)原理就是利用了反射機(jī)制,掌握反射機(jī)制會(huì)使你學(xué)習(xí)框架更加輕松高效,這篇文章主要給大家介紹了關(guān)于Java反射機(jī)制原理、Class獲取方式以及應(yīng)用場(chǎng)景的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Java如何獲取對(duì)象屬性及對(duì)應(yīng)值

    Java如何獲取對(duì)象屬性及對(duì)應(yīng)值

    這篇文章主要介紹了Java如何獲取對(duì)象屬性及對(duì)應(yīng)值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 30分鐘教你上手用Java快速搭建你的第一個(gè)向量數(shù)據(jù)庫(kù)

    30分鐘教你上手用Java快速搭建你的第一個(gè)向量數(shù)據(jù)庫(kù)

    在?AI?大爆發(fā)的時(shí)代,向量數(shù)據(jù)庫(kù)成為連接原始數(shù)據(jù)與大模型的核心樞紐,如果你是?Java?開(kāi)發(fā)者,想快速搭上向量數(shù)據(jù)庫(kù)的快車(chē),這篇實(shí)操指南就是為你準(zhǔn)備的,全程無(wú)需復(fù)雜環(huán)境配置,30?分鐘內(nèi)帶你從?0?到?1?搭建可運(yùn)行的向量數(shù)據(jù)庫(kù)應(yīng)用
    2026-04-04
  • Mybatis-plus+通用mapper(tk.mybatis)的使用

    Mybatis-plus+通用mapper(tk.mybatis)的使用

    本文主要介紹了Mybatis-plus+通用mapper(tk.mybatis)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2024-03-03
  • 實(shí)例詳解SpringBoot默認(rèn)的JSON解析方案

    實(shí)例詳解SpringBoot默認(rèn)的JSON解析方案

    JSON數(shù)據(jù)現(xiàn)在是我們開(kāi)發(fā)中用的最多的,百分之九十的數(shù)據(jù)都是通過(guò)JSON方式進(jìn)行傳輸,下面這篇文章主要給大家介紹了關(guān)于SpringBoot默認(rèn)的JSON解析方案的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 一文徹底搞懂Java和JDK的版本命名問(wèn)題

    一文徹底搞懂Java和JDK的版本命名問(wèn)題

    今天通過(guò)本文給大家分享我對(duì)Java的版本號(hào)以及JDK的命名的了解,通過(guò)實(shí)例圖文展示給大家介紹的非常詳細(xì),需要的朋友跟隨小編一起看看吧
    2021-06-06
  • SpringBoot如何接收Post請(qǐng)求Body里面的參數(shù)

    SpringBoot如何接收Post請(qǐng)求Body里面的參數(shù)

    這篇文章主要介紹了SpringBoot如何接收Post請(qǐng)求Body里面的參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 關(guān)于maven打包時(shí)的報(bào)錯(cuò): Return code is: 501 , ReasonPhrase:HTTPS Required

    關(guān)于maven打包時(shí)的報(bào)錯(cuò): Return code is: 501 , ReasonPhrase:HTTPS Requ

    這篇文章主要介紹了關(guān)于maven打包時(shí)的報(bào)錯(cuò): Return code is: 501 , ReasonPhrase:HTTPS Required,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java新手環(huán)境搭建 JDK8安裝配置教程

    Java新手環(huán)境搭建 JDK8安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Java新手環(huán)境搭建,JDK8安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 如何利用jwt來(lái)保護(hù)你的接口服務(wù)

    如何利用jwt來(lái)保護(hù)你的接口服務(wù)

    項(xiàng)目軟件要對(duì)外提供部分定制接口,為了保證軟件數(shù)據(jù)的安全性,這篇文章主要給大家介紹了關(guān)于如何利用jwt來(lái)保護(hù)你的接口服務(wù)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

香港| 建阳市| 渭南市| 油尖旺区| 虹口区| 怀仁县| 伊金霍洛旗| 镇坪县| 嫩江县| 永嘉县| 洪洞县| 枣强县| 柳林县| 汉中市| 东光县| 永清县| 剑河县| 连州市| 镇平县| 桃江县| 霞浦县| 扎鲁特旗| 贞丰县| 会理县| 利津县| 克什克腾旗| 海阳市| 屏山县| 衡南县| 乌鲁木齐县| 蚌埠市| 察隅县| 南京市| 义马市| 台东市| 塔河县| 长沙县| 沾益县| 藁城市| 东辽县| 德安县|