Java二維碼學習

使用Java語言生成二維碼有以下方式,一是谷歌的zxing,二是基于zxing實現的qrcode開源項目,三是基于zxing實現的qrgen開源項目

一 zxing

谷歌的zxing技術生成二維碼,是MultiFormatWriter多寫格式書寫器生成BitMatrix位矩陣,然后將位矩陣的信息在BufferedImage中設置二維碼圖片,最后由ImageIO將二維碼圖片寫出到文件。

1.1 生成普通二維碼

<dependencies><!-- 二維碼操作相關依賴 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.0</version></dependency><!-- word文檔操作相關依賴 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency>
</dependencies>
public static void main(String[] args) throws WriterException, IOException, InvalidFormatException {String str = "Yesterday Once More";final String CHARSET = "UTF-8";final int QRCODE_SIZE = 100;// EncodeHintType編碼提示類型, 用來設置二維碼圖片的相關參數// Map集合使用Hashtable和HashMap都可以// Hashtable是線程安全的,但同步會帶來性能損耗// HashMap是非線程安全,但在單線程環境下效率更高Map<EncodeHintType, Object> hints = new Hashtable<>();hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);hints.put(EncodeHintType.CHARACTER_SET, CHARSET);hints.put(EncodeHintType.MARGIN, 0);// MultiFormatWriter多格式書寫器, 是二維碼生成類// BitMatrix位矩陣, 是布爾型二維數組, 表示二維碼矩陣的數據結構BitMatrix bitMatrix = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, QRCODE_SIZE, QRCODE_SIZE, hints);int width = bitMatrix.getWidth();int height = bitMatrix.getHeight();// BufferedImage圖像類, 提供了對圖像像素級別的訪問和修改BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);for (int i = 0; i < width; i++) {for (int j = 0; j < height; j++) {bufferedImage.setRGB(i, j, bitMatrix.get(i, j) ? 0x000000 : 0xFFFFFF);}}ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// ImageIO標準圖像輸入輸出工具類, 用于讀取、寫入和處理各種格式的圖像文件ImageIO.write(bufferedImage, "jpg", byteArrayOutputStream);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());// XWPFDocument類位于Apache POI庫中的poi-ooxml模塊中, 用于操作Microsoft Word(.docx)文檔XWPFDocument document = new XWPFDocument();XWPFRun run = document.createParagraph().createRun();run.addPicture(byteArrayInputStream, XWPFDocument.PICTURE_TYPE_JPEG, "mango", Units.toEMU(128), Units.toEMU(128));FileOutputStream fileOutputStream = new FileOutputStream("D:\\mango.docx");document.write(fileOutputStream);fileOutputStream.close();
}

生成的二維碼如下:

EncodeHintType編碼提示類型是一個枚舉類,用來設置二維碼圖片的相關屬性,使用EncodeHintType作為key,Object作為value的Hashtable,常用設置如下:
    EncodeHintType.ERROR_CORRECTION設置二維碼的容錯率,value值ErrorCorrectionLevel也是枚舉類,由L(7%)、M(15%)、Q(25%)和H(30%)四個可選項;
    EncodeHintType.CHARACTER_SET設置字符集,value值可以設置UTF-8;
    EncodeHintType.MARGIN設置二維碼周邊留白大小,value值是一個整型數值;

MultiFormatWriter多格式書寫器, 是二維碼生成類,MultiFormatWriter的encode方法可以將指定文本生成BitMatrix位矩陣對象,encode方法定義如下
public BitMatrix encode(String contents, BarcodeFormat format, int width, int height, Map<EncodeHintType, ?> hints),參數解釋:
    String contents:要生成二維碼的文本內容;
    BarcodeFormat format:指定碼的格式,BarcodeFormat是枚舉值,常用枚舉值有QR_CODE(通用二維碼,支持文本和鏈接URL),CODE_128(條形碼,支持物流和商品管理)和EAN_13(國際商品編碼,廣泛用于零售商品?);
    int width:二維碼的寬度(像素);
    int height:二維碼的高度(像素);
    Map<EncodeHintType, ?> hints:二維碼圖片的相關屬性,Map集合使用Hashtable和HashMap都可以,Hashtable是線程安全的,但同步會帶來性能損耗,HashMap是非線程安全,但在單線程環境下效率更高;

BitMatrix表示二維碼矩陣的數據結構,由0和1構成的布爾型二維數組,常用于將編碼后的信息轉化為矩陣形式,用于存儲和處理生成二維碼圖像所需的二進制信息,通過對BitMatrix對象的構建和操作,最終生成一個可被掃描解碼的二維碼圖像,BitMatrix常用API:
    public int getHeight():獲取二維碼矩陣高度;
    public int getWidth():獲取二維碼矩陣寬度;
    public boolean get(int x, int y):根據x,y的坐標獲取矩陣中該坐標的值,結果是true(有值)或者false(無值);

BufferedImage緩沖區圖像類,將一幅圖片加載到內存中(BufferedImage生成的圖片在內存里有一個圖像緩沖區),在緩沖區操作圖片資源,而且提供獲得繪圖對象、圖像縮放、選擇圖像平滑度等功能,通常用來做圖片大小變換、圖片變灰、設置透明不透明等;
ImageIO是Java的標準圖像輸入輸出工具類,用于讀取、寫入和處理各種格式的圖像文件;

1.2 生成彩色二維碼

在設置BufferedImage對象的setRGB方法中,設置RGB顏色時,指定需要的顏色即可,譬如生成前景色為純藍色的二維碼,使用0x0000FF進行RGB設置

// BufferedImage圖像類, 提供了對圖像像素級別的訪問和修改
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int i = 0; i < width; i++) {for (int j = 0; j < height; j++) {bufferedImage.setRGB(i, j, bitMatrix.get(i, j) ? 0x0000FF : 0xFFFFFF);}
}

1.3 生成帶logo的二維碼

public static void main(String[] args) throws WriterException, IOException, InvalidFormatException {String str = "Yesterday Once More";final String CHARSET = "UTF-8";final int QRCODE_SIZE = 100;// EncodeHintType編碼提示類型, 用來設置二維碼圖片的相關參數// Map集合使用Hashtable和HashMa

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

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

相關文章

工業質檢/缺陷檢測領域最新頂會期刊論文收集整理 | AAAI 2025【持續更新中】

會議官方論文列表&#xff1a;https://ojs.aaai.org/index.php/AAAI/issue/view/624 其中&#xff0c;2025年是第三十九屆AAAI人工智能大會&#xff0c;主要對第三十九屆相關論文進行梳理&#xff0c;當前已初版28期(volume 39 no. 28) 【Attention】 雖然本文主要面向的領域…

數據結構實驗8.1:圖的基本操作

文章目錄 一&#xff0c;實驗目的二&#xff0c;實驗內容三&#xff0c;實驗要求四&#xff0c;算法分析五&#xff0c;示例代碼8-1.cpp源碼graph.h源碼 六&#xff0c;操作步驟七&#xff0c;運行結果 一&#xff0c;實驗目的 1&#xff0e;掌握圖的鄰接矩陣、鄰接表的表示方…

Spring Boot3 實現定時任務 每10分鐘執行一次,同時要解決分布式的問題 區分不同場景

在Spring Boot 3中實現分布式定時任務&#xff0c;確保多實例環境下任務僅執行一次&#xff0c;可以采用以下方案&#xff1a; 方案一&#xff1a;Redis分布式鎖&#xff08;推薦&#xff09; import org.springframework.data.redis.core.StringRedisTemplate; import org.sp…

WPF MVVM入門系列教程(五、命令和用戶輸入)

&#x1f9ed; WPF MVVM入門系列教程 一、MVVM模式介紹二、依賴屬性三、數據綁定四、ViewModel五、命令和用戶輸入六、ViewModel案例演示 WPF中的命令模型 在WPF中&#xff0c;我們可以使用事件來響應鼠標和鍵盤動作。 但使用事件會具備一定的局限性&#xff0c;例如&#x…

2025年01月09日德美醫療前端面試

目錄 vue2 的雙向綁定的原理vue3 的雙向綁定原理vue 的生命周期vue 子組件為何不能修改父組件的值js delete 刪除數組的某一個值會怎么樣vue 和 react 的 diff 算法什么是閉包原型鏈this指向 vue2 的雙向綁定的原理 以下是 Vue 2 雙向綁定的原理&#xff1a; 1. 核心概念 …

知識圖譜 + 大語言模型:打造更聰明、更可靠的AI大腦 —— 探索 GraphRAG 中文優化與可視化實踐

大語言模型&#xff08;LLMs&#xff09;無疑是近年來人工智能領域最耀眼的明星。它們強大的自然語言理解和生成能力&#xff0c;在文本創作、代碼生成、對話交互等眾多領域展現了驚人的潛力。然而&#xff0c;當前的 LLMs 并非完美無缺&#xff0c;它們常常面臨著“幻覺”&…

【uniapp】在UniApp中檢測手機是否安裝了某個應用

1. 使用plus.runtime.isApplicationExist&#xff08;僅限App端&#xff09; // 判斷應用是否安裝 function checkAppInstalled(packageName) {if (uni.getSystemInfoSync().platform android || uni.getSystemInfoSync().platform ios) {// 僅App端可用if (typeof plus ! u…

使用 Vue + Axios 構建與后端交互的高效接口調用方案

使用 Vue Axios 構建與后端交互的高效接口調用方案 在 Vue 前端開發中&#xff0c;與后端接口的數據交互是非常核心的部分。而 Axios 是 Vue 項目中最常用的 HTTP 客戶端&#xff0c;具備基于 Promise、攔截器、自定義實例等諸多優勢。 本篇將深入介紹如何基于 Vue 搭配 Axi…

RN學習筆記 ?

太無聊了最近&#xff0c;找點事做&#xff0c;學一下RN豐富一下技術棧&#x1fae1;。但是開發APP除了RN&#xff0c;還有一種選擇就是WebView&#xff0c;但是基于WebView的APP的性能被普遍認為不如RN&#xff0c;因為WebView本質上是一個容器&#xff0c;用于在應用中嵌入網…

聊天助手提示詞調優案例

一、背景 今天有粉絲說自己的聊天助手提示詞輸出的效果不好&#xff0c;輸出的內容不是太呆板就是太浮夸&#xff0c;希望更像真人一樣。 本文介紹幾個調優方法&#xff0c;希望對大家有啟發。 二、調優 《系統掌握大語言模型提示詞 - 從理論到實踐》提示詞小冊中介紹了很多…

5.6 react組件化開發基礎

react 組件開發基礎 組件分類與組件使用 組件傳參 父傳子 【函數數據傳值 實參 形參對應關系】 子傳父 插槽 透傳 useContext 上下文&#xff08;作用域&#xff09; 跨層級調用方法 通過子組件的實例對象useRef 直接調用子組件的方法 和數據 狀態管理&#xff08;非常多…

【SF順豐】順豐開放平臺API對接(Java對接篇)

對接前置篇&#xff1a; 【SF順豐】順豐開放平臺API對接&#xff08;注冊、API測試篇&#xff09;_順豐api接口對接指南-CSDN博客 1.實現效果展示 2.SF順豐開放平臺&#xff0c;JDK資源下載。 下載地址&#xff1a;順豐開放平臺 3.將下載的JDK放入項目中。 4.將JDK資源引入p…

我用cursor 搭建了臨時郵箱服務-Temp Mail 365

用業余時間搭建了一個臨時郵箱&#xff0c;對于后端程序員出身的我&#xff0c;對前端了解的不太多&#xff0c;有了cursor的幫助&#xff0c;補齊了自己的短板&#xff0c;搭建了這個服務&#xff0c;下面對臨時郵箱架構設計與安全性做一個分析。 https://temp-mail-365.com 臨…

破解工業3D可視化困局,HOOPS Visualize助力高效跨平臺協作與交互!

一、當前3D可視化面臨的痛點 &#xff08;1&#xff09;性能瓶頸 現有的許多3D可視化工具在處理大型復雜模型時往往力不從心。例如在航空航天、汽車制造等高端制造業&#xff0c;動輒涉及數以億計的三角面片和海量的紋理細節。這些超大規模的模型在渲染時常常出現卡頓、延遲&…

1、Kafka與消息隊列核心原理詳解

消息隊列&#xff08;Message Queue, MQ&#xff09;作為現代分布式系統的基礎組件&#xff0c;極大提升了系統的解耦、異步處理和削峰能力。本文以Kafka為例&#xff0c;系統梳理消息隊列的核心原理、架構細節及實際應用。 Kafka 基礎架構及術語關系圖 術語簡要說明 Produce…

2025年北京市職工職業技能大賽第六屆信息通信行業網絡安全技能大賽初賽-wp

- -考試當場沒做出來 后面做的 misc ? cd misc ? ls num.docx num.zip ? unzip num.docx Archive: num.docxinflating: [Content_Types].xmlinflating: _rels/.relsinflating: word/document.xmlinflating: word/_rels/document.xml.relsextracting: word/media/image1.jp…

JavaScript 到命令和控制 (C2) 服務器惡意軟件分析及防御

攻擊始于一個經過混淆的JavaScript文件,該文件從開源服務中獲取編碼字符串以執行PowerShell腳本。然后,該腳本從一個IP地址和一個URL縮短器下載一個JPG圖像和一個文本文件,這兩個文件都包含使用隱寫術嵌入的惡意MZ DOS可執行文件。這些有效載荷一旦執行,就會部署Stealer惡意…

【計網】ipconfig、ping、arp、tracert

目錄 ipconfig ping arp tracert cmd ipconfig ipcofig -all IPv4 物理地址 ping 檢測網絡連通情況&#xff0c;分析網絡速度 根據域名得到服務器IP 根據TTL判斷對方所使用的操作系統以及數據包經過路由器數量 byte數據包大小 time響應時間 TTLDNS記錄在DNS服務器上存在…

WiFi那些事兒(八)——802.11n

目錄 802.11n 技術簡介與測試項 一、802.11n 技術簡介 &#xff08;一&#xff09;標準概述 &#xff08;二&#xff09;關鍵技術特性 1. MIMO&#xff08;多輸入多輸出&#xff09;技術 2. 信道綁定&#xff08;Channel Bonding&#xff09; 3. 幀聚合&#xff08;Fram…

碼蹄集——直角坐標到極坐標的轉換、射線、線段

目錄 MT1052 直角坐標到極坐標的轉換 MT1066 射線 MT1067 線段 MT1052 直角坐標到極坐標的轉換 思路&#xff1a; arctan()在c中是atan()&#xff0c;結果是弧度要轉換為度&#xff0c;即乘與180/PI 拓展&#xff1a;cos()、sin()在c代碼中表示方式不變 #include<bits/…