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

SpringBoot整合ZXing實現(xiàn)二維碼和條形碼的創(chuàng)建

 更新時間:2023年12月12日 09:27:41   作者:-代號9527  
如今我們越來越多的東西需要用到二維碼或者條形碼,商品的條形碼,付款的二維碼等等,所以本文小編給大家介紹了SpringBoot整合ZXing實現(xiàn)二維碼和條形碼的創(chuàng)建,文章通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下

以下為整合zxing實現(xiàn)二維碼和條形碼的生成。

1、引入依賴

引入ZXing依賴的坐標:

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.4.1</version> 
</dependency>

2、Service層實現(xiàn)

Service接口略,實現(xiàn)類:

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;

/**
 * @author LLG
 * @date 2023/12/8
 */
@Service
@Slf4j
public class CodeService {

    /**
     * 生成二維碼
     * @param data   掃描二維碼后得到的信息
     * @param width  二維碼的寬
     * @param height 二維碼的高
     * @return image
     */
    public BufferedImage generateCode(String data, int width, int height) {
        BufferedImage image = null;
        try {
            Map<EncodeHintType, Object> hints = new HashMap<>();
            //字符編碼
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            //錯誤糾正級別
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
            //二維碼邊距
            hints.put(EncodeHintType.MARGIN, 2);
            MultiFormatWriter writer = new MultiFormatWriter();
            //樣式選擇QR_CODE,其余枚舉類中的可選樣式可自己玩
            BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, width, height, hints);
            image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
            //每個框框的顏色
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    image.setRGB(i, j, bitMatrix.get(i, j) ? Color.BLACK.getRGB() : Color.WHITE.getRGB());
                }
            }
            /*以下為選擇保存二維碼
            String filePath = "test.png";
            File codeFile = new File(filePath);
            ImageIO.write(image,"png",codeFile);
            log.info("QR碼生成成功,保存路徑{}",filePath);*/
        } catch (Exception e) {
            e.printStackTrace();
        }
        return image;

    }

    /**
     * 生成條形碼
     * @param data   掃描二維碼后得到的信息
     * @param width  條形碼的寬
     * @param height 條形碼的高
     * @return image
     */
    public BufferedImage generateBarCode(String data, int width, int height) {
        BufferedImage image = null;
        try {
            Map<EncodeHintType, Object> hints = new HashMap<>();
            //字符編碼
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            MultiFormatWriter writer = new MultiFormatWriter();
            //碼的樣式這次選CODE_128
            BitMatrix bitMatrix = writer.encode(data, BarcodeFormat.CODE_128, width, height, hints);
            image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    image.setRGB(i, j, bitMatrix.get(i, j) ? 0 : 0xFFFFFF);   //黑白條形碼
                }
            }
        } catch (WriterException e) {
            e.printStackTrace();
        }

        return image;
    }

 
}

3、Controller

寫個簡單API調(diào)用下:

@RestController
public class CodeController {

    @Resource
    private CodeService codeService;

    @GetMapping("/code/image")
    public void getCodeImage(HttpServletRequest request, HttpServletResponse response){
        //測試數(shù)據(jù)
        String data = "code9527-test!";
        BufferedImage image = codeService.generateCode(data, 100, 100);
        try {
            ImageIO.write(image,"png",response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @GetMapping("/code/barCode")
    public void getBarCode(HttpServletRequest request,HttpServletResponse response){
        //條形碼中的內(nèi)容
        String data = "TB20231208154900";
        BufferedImage barCode = codeService.generateBarCode(data, 400, 100);
        try {
            ImageIO.write(barCode,"png",response.getOutputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4、效果

二維碼:

條形碼:

以上就是SpringBoot整合ZXing實現(xiàn)二維碼和條形碼的創(chuàng)建的詳細內(nèi)容,更多關于SpringBoot ZXing二維碼和條形碼的資料請關注腳本之家其它相關文章!

相關文章

  • Java反射框架Reflections示例詳解

    Java反射框架Reflections示例詳解

    這篇文章主要介紹了Java反射框架Reflections示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java對稱加密算法DES實例詳解

    Java對稱加密算法DES實例詳解

    這篇文章主要介紹了Java對稱加密算法DES,結合實例形式詳細分析了java DES算法的概念、原理、實現(xiàn)方法與應用場景,需要的朋友可以參考下
    2019-09-09
  • Spring Security JWT 鑒權鏈路完整解析

    Spring Security JWT 鑒權鏈路完整解析

    文章詳細解析了SpringSecurity結合JWT實現(xiàn)鑒權的完整鏈路,從配置到代碼,涵蓋了從請求到業(yè)務層的每一個步驟,包括配置資源服務器模式、JWT編解碼、自定義JWT服務、請求過濾和Controller層的注入機制
    2026-02-02
  • Spring異常實現(xiàn)統(tǒng)一處理的方法

    Spring異常實現(xiàn)統(tǒng)一處理的方法

    這篇文章主要介紹了Spring異常實現(xiàn)統(tǒng)一處理的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • Java進階之在Word文檔中動態(tài)增刪頁面的完整指南

    Java進階之在Word文檔中動態(tài)增刪頁面的完整指南

    本文將介紹如何使用一款第三方 Java 庫,以編程方式實現(xiàn)對 Word 文檔頁面及段落內(nèi)容的精細化管理,文章將從環(huán)境配置開始,逐步演示如何新增頁面,在指定位置插入頁面以及刪除特定頁面,希望對大家有一定的幫助
    2026-05-05
  • 深入理解java中的synchronized關鍵字

    深入理解java中的synchronized關鍵字

    這篇文章主要介紹了java中的synchronized關鍵字,有需要的朋友可以參考一下
    2013-12-12
  • Java SpringBoot 集成 Redis詳解

    Java SpringBoot 集成 Redis詳解

    Redis 是一個由 Salvatore Sanfilippo 寫的 key-value 存儲系統(tǒng),是跨平臺的非關系型數(shù)據(jù)庫。Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協(xié)議、支持網(wǎng)絡、可基于內(nèi)存、分布式、可選持久性的鍵值對(Key-Value)存儲數(shù)據(jù)庫,并提供多種語言的 API
    2021-10-10
  • maven的pom.xml中repositories和distributionManagement使用

    maven的pom.xml中repositories和distributionManagement使用

    這篇文章主要介紹了maven的pom.xml中repositories和distributionManagement使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Java中雙大括號初始化的理解與使用

    Java中雙大括號初始化的理解與使用

    最近重讀Java 編程思想,讀到有關實例化代碼塊兒的內(nèi)容,使我對于使用兩個大括號進行初始化有了更深的理解,下面這篇文章主要給大家介紹了關于Java中雙大括號初始化的理解與使用的相關資料,需要的朋友可以參考下
    2022-06-06
  • Springboot配置圖片虛擬映射示例代碼

    Springboot配置圖片虛擬映射示例代碼

    這篇文章主要給大家介紹了關于Springboot配置圖片虛擬映射的相關資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用springboot具有一定的參考學習價值,需要的朋友可以參考下
    2021-11-11

最新評論

亳州市| 仪陇县| 嵊泗县| 公安县| 达州市| 永顺县| 醴陵市| 台州市| 莱阳市| 库尔勒市| 红原县| 宝清县| 顺昌县| 大名县| 精河县| 武鸣县| 平凉市| 普宁市| 杭锦后旗| 绵阳市| 玉龙| 鄢陵县| 沁源县| 诏安县| 崇文区| 张家川| 汉阴县| 巢湖市| 慈溪市| 怀仁县| 沁阳市| 应用必备| 龙川县| 万源市| 伊宁县| 纳雍县| 开远市| 城口县| 京山县| 宝坻区| 大田县|