使用 zxing 生成二維碼以及條形碼

目錄

需求背景

前期在做項目的時候,有一個需求是說要生成一張條形碼,并且呢將條形碼插入到 excel 中去,但是之前一直沒有搞過找個條形碼或者是二維碼,最后是做出來了,這里呢就先看看怎么生成,后面再抽時間來寫寫怎么實現條形碼插入到 excel 中去。

開始搭建

引入對應的 zxing 依賴包

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

條形碼生成與讀取

這里呢,我就不贅述太多了,因為這個就是一個工具類,設置好對應的參數,執行指定的方法就可以了,比較簡單,具體的生成代碼以及讀取條形碼的代碼如下:

import com.google.zxing.*;
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;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;public class BarCodeUtils {/*** generateCode 根據code生成相應的一維碼** @param file   一維碼目標文件* @param code   一維碼內容* @param width  圖片寬度* @param height 圖片高度*/public static void generateCode(File file, String code, int width, int height) {//定義位圖矩陣BitMatrixBitMatrix matrix = null;try {// 使用code_128格式進行編碼生成100*25的條形碼MultiFormatWriter writer = new MultiFormatWriter();Map<EncodeHintType, Object> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");//定義編碼參數 這里可以設置條形碼的格式matrix = writer.encode(code, BarcodeFormat.CODE_128, width, height, hints);//matrix = writer.encode(code,BarcodeFormat.EAN_13, width, height, hints);} catch (WriterException e) {e.printStackTrace();}//將位圖矩陣BitMatrix保存為圖片try (FileOutputStream outStream = new FileOutputStream(file)) {assert matrix != null;ImageIO.write(MatrixToImageWriter.toBufferedImage(matrix), "png", outStream);outStream.flush();} catch (Exception e) {e.printStackTrace();}}/*** readCode 讀取一張一維碼圖片** @param file 一維碼圖片名字或者是文件路徑*/public static void readCode(File file) {try {BufferedImage image = ImageIO.read(file);if (image == null) {return;}LuminanceSource source = new BufferedImageLuminanceSource(image);BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));Map<DecodeHintType, Object> hints = new HashMap<>();hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);Result result = new MultiFormatReader().decode(bitmap, hints);System.out.println("條形碼內容: " + result.getText());} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws Exception {generateCode(new File("D:\\barcode.png"), "123456789012", 500, 250);readCode(new File("D:\\barcode.png"));}}

執行下:
執行結果
對應的文件:
對應的文件

二維碼生成與讀取

上面我們看了下條形碼的生成與讀取,那么我們來看下二維碼怎么生成:

import com.google.zxing.*;
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;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import java.util.Map;public class QRCodeUtils {//生成二維碼public static void generateQRCode(String content, int width, int height, String filePath) throws Exception {String format = "png";Map<EncodeHintType, Object> hints = new HashMap<>();hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");   //設置編碼hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); //設置容錯等級hints.put(EncodeHintType.MARGIN, 1);    // 設置邊距BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);QRCodeUtils.outputQRCode(bitMatrix, format, filePath);}private static void outputQRCode(BitMatrix matrix, String format, String filePath) throws Exception {MatrixToImageWriter.writeToPath(matrix, format, java.nio.file.Paths.get(filePath));}//讀取二維碼public static void readQrCode(File file) {MultiFormatReader reader = new MultiFormatReader();try {BufferedImage image = ImageIO.read(file);BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));Map<DecodeHintType, Object> hints = new HashMap<>();hints.put(DecodeHintType.CHARACTER_SET, "utf-8");//設置編碼Result result = reader.decode(binaryBitmap, hints);System.out.println("解析結果:" + result.toString());System.out.println("二維碼格式:" + result.getBarcodeFormat());System.out.println("二維碼文本內容:" + result.getText());} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws Exception {String filePath = "D:\\qrcode.png";generateQRCode("https://www.baidu.com", 300, 300, filePath);readQrCode(new File(filePath));}}

執行下:
執行結果
對應的文件:
對應的二維碼文件

支持的格式源碼部分

我們可以點擊看下源碼 BarcodeFormat 類中支持的各種格式,這里是將所有的都給枚舉出來了,大家需要用到的時候再具體查看吧

public enum BarcodeFormat {AZTEC,CODABAR,CODE_39,CODE_93,CODE_128,DATA_MATRIX,EAN_8,EAN_13,ITF,MAXICODE,PDF_417,QR_CODE,RSS_14,RSS_EXPANDED,UPC_A,UPC_E,UPC_EAN_EXTENSION;private BarcodeFormat() {}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21627.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21627.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21627.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一條SQL語句的執行究竟經歷了哪些過程

在數據庫管理系統(DBMS)中,一條SQL語句的執行過程復雜且精細,從用戶輸入到獲取結果,中間需要經過多個步驟和組件的協同工作。這些步驟包括解析、優化、執行和結果返回等。以下是SQL語句執行過程的詳細分析: 1. 客戶端連接 連接建立: 用戶通過客戶端(如應用程序、SQL客戶…

掌握Element UI:加速你的網頁設計過程!

Element UI 是一套為開發者、UI/UX設計師和產品經理準備的采用Vue 2.0作為基礎框架實現的組件庫&#xff0c;提供配套的設計資源&#xff0c;可以幫助設計快速成型。即時設計也內置Element UI Kit資源&#xff0c;但有些小伙伴還是對此不太了解&#xff0c;接下來本文會詳細帶你…

antd-vue - - - - - a-select結合i18n使用(踩坑問題)

antd-vue - - - - - a-select結合i18n使用&#xff08;踩坑問題&#xff09; 1. 當前代碼 & 效果2. 解決辦法 1. 當前代碼 & 效果 <a-selectv-model:value"formState.quickSwitching":options"quickSwitchingOptions"search"handleSearch…

vue3+element-plus 表單校驗和循環form表單校驗

1.HTML頁面 //el-form 標簽添加上 ref"form2Form" :rules"rules2" :model"form2" 正常表單校驗 //沒有循環表單的使用事例<el-form-item label"投保人名稱" class"insurance-date-no1" prop"tbrName">…

什么是增值稅通俗的理解

增值稅的目的是為了對商品或服務在生產過程中增加的價值進行征稅。通俗地說&#xff0c;就是每當商品或服務在生產和銷售過程中“增值”了一次&#xff0c;政府就要對這部分增值收稅。 舉個例子&#xff0c;假設一個農場主種了小麥&#xff0c;然后賣給了面粉廠。面粉廠將小麥加…

29、親身體驗Young GC風暴:模擬教程帶你走進GC的神秘世界!

29.1、前文回顧 在今天的文章,我們將通過代碼演示來展示年輕代的Young GC是如何發生的。同時,我們還將指導大家如何在JVM參數中配置打印對應的GC日志。接下來,我們將通過分析GC日志,逐步解析JVM的垃圾回收機制是如何運作的。 29.2、不可不知的JVM參數設置技巧 首先,根據…

大米cms安裝支付邏輯漏洞

1.安裝 下載來源&#xff1a;https://www.cnblogs.com/xfbk/p/17910054.html 鏈接&#xff1a;https://pan.baidu.com/s/1b-Z6RaFBZ6CsSIErY46Pyg?pwdq8qq 提取碼&#xff1a;q8qq 注意一下配置就可以了&#xff1a;php5.5apachemysql5.0&#xff0c;主要就是數據庫版本要注…

某直聘zp_stoken純算法還原

鄭重聲明&#xff1a;本項目的所有代碼和相關文章&#xff0c; 僅用于經驗技術交流分享&#xff0c;禁止將相關技術應用到不正當途徑&#xff0c;因為濫用技術產生的風險與本人無關。 難點概要&#xff1a; 每日切換一次算法&#xff0c;其中包括環境&#xff0c;運行方式等。…

提莫攻擊 ---- 模擬算法

題目鏈接 題目: 分析: 如果兩次攻擊的時間差是>中毒的持續時間duration, 那么第一次攻擊的中毒時間就是duration如果兩次攻擊的時間差是< 中毒的持續時間duration, 那么第一次攻擊的持續時間就是這個時間差假設攻擊了n次, 那么我們從第一次攻擊開始計算時間差, 那么當我…

下載安裝node.js,查看node.js版本

目錄 一、下載安裝node.js 二、查看node.js版本 三、使用nvm管理node.js版本 一、下載安裝node.js 文檔 nodejs中文網?學習教程?入門?如何安裝 Nodejshttps://nodejs.cn/en/learn/getting-started/how-to-install-nodejs 步驟 1.進入node.js官網 nodejshttps://nodejs.…

【WEEK15】學習目標及總結【Spring Boot】【中文版】

學習目標&#xff1a; 學習SpringBoot 學習內容&#xff1a; 參考視頻教程【狂神說Java】SpringBoot最新教程IDEA版通俗易懂 學習時間及產出&#xff1a; 第十五周MON~FRI 2024.6.3 2024.6.4 2024.6.5 2024.6.6 2024.6.7

下載舊版postman(無需要登錄,無需聯網,即可輕松使用postman)

https://www.filehorse.com/download-postman/old-versions/page-3/ 人工智能學習網站 https://chat.xutongbao.top

推薦系統三十六式學習筆記:03|這些你必須應該具備的思維模式

目錄 對關鍵元素重要性的認識&#xff1a;目標思維和不確定思維總結&#xff1a; 今天我主要帶你認識兩方面的內容&#xff1a;一個是重新認識推薦系統關鍵元素的重要性&#xff0c;另一個是要建立起兩個思維模式。 對關鍵元素重要性的認識&#xff1a; 要開發一個推薦系統產…

字符串和字符串函數(2)

前言&#xff1a; 在字符串和字符串函數&#xff08;1&#xff09;-CSDN博客中&#xff0c;已將將字符串和字符函數的使用了解&#xff0c;并且實現模擬了一些字符串的庫函數。 接下來將繼續深入學習字符串和字符串函數。并且模擬實現一些較為復雜的函數。 可控制字符…

【Linux基礎】安裝nginx

【Linux基礎】安裝nginx 文章目錄 【Linux基礎】安裝nginx1、下載nginx2、安裝nginx3、使用nginx4、配置nginx環境變量 1、下載nginx 在Nginx的官網的下載頁面中(http://nginx.org/en/download.html)&#xff0c;就展示了當前Nginx版本&#xff0c;并提供了下載的連接。 如下&a…

圖像處理之基于標記的分水嶺算法(C++)

圖像處理之基于標記的分水嶺算法&#xff08;C&#xff09; 文章目錄 圖像處理之基于標記的分水嶺算法&#xff08;C&#xff09;前言一、基于標記點的分水嶺算法應用1.實現步驟&#xff1a;2.代碼實現 總結 前言 傳統分水嶺算法存在過分割的不足&#xff0c;OpenCV提供了一種…

【C語言進階】動態內存管理及柔性數組

動態內存的開辟在C語言中相當重要的知識 1、為什么會存在動態內存分配 內存的開辟方式&#xff1a; int a20;//在棧空間上開辟4個字節 int arr[10];//在棧空間上開辟40個字節的連續空間 這種開辟空間的方式有兩個特點&#xff1a; 1、開辟的空間大小是固定的 2、數組在聲明的…

二叉樹創建和遍歷

個人主頁 &#xff1a;敲上癮-CSDN博客二叉樹介紹&#xff1a;二叉樹(詳解)-CSDN博客 目錄 一、二叉樹的創建 二、二叉樹的遍歷 1.前序遍歷 2.中序遍歷 3.后序遍歷 4.層序遍歷 三、相關計算 1.總節點個數計算 2.葉子節點個數計算 3.深度計算 一、二叉樹的創建 關于…

如何在路由器上安裝代理服務:詳細教程

如何在路由器上安裝代理服務&#xff1a;詳細教程 步驟一&#xff1a;通過漏洞進入路由器系統開啟Telnet服務使用Telnet登錄路由器系統查看系統信息和CPU信息步驟二&#xff1a;交叉編譯MIPS程序 Go對MIPS的支持 安裝TFTP Server使用BusyBox tftp傳輸文件在路由器系統中下載編譯…

?機器學習正則化算法的總結。耗時10個小時完成。?

?純 干 貨~? 目錄 純干貨 1、L1 正則化&#xff08;Lasso 正則化&#xff09; 2、L2 正則化&#xff08;嶺正則化&#xff09; 3、彈性網絡正則化&#xff08;Elastic Net 正則化&#xff09; 4、Dropout 正則化&#xff08;用于神經網絡&#xff09; 5、貝葉斯Rid…