目錄
- 前言
- 碼圖技術概述
- 關於文字生成碼圖
- 使用場景
- 文字生成碼圖的約束與限制
- 實現文字生成碼圖
- 自定義碼圖
結束語
前言
在當前的軟體開發中,生成二維碼和條形碼(統稱為碼圖)是一個非常常見的需求,尤其是在需要快速分享資訊、資料驗證和支付處理的應用中,再加上掃碼支付和掃碼認證等功能的越來越普及,碼圖的應用越來越多。而且在鴻蒙原生應用開發中,HarmonyOS提供了強大的API支援,使得開發者可以輕鬆實現透過文字生成碼圖的功能。那麼本文就來詳細介紹如何在HarmonyOS應用中實現文字到碼圖的轉換,包括技術選型、實現步驟和程式碼示例。
碼圖技術概述
先來了解一下碼圖技術,它其實包括二維碼和條形碼,是一種將資料編碼為圖形的方式,便於掃描和自動識別。二維碼因其高密度資訊儲存和易於生成的特點,比條形碼更為流行。另外,碼圖生成能力支援將字串轉換為自定義格式的碼圖。
關於文字生成碼圖
在HarmonyOS中,透過文字生成碼圖通常涉及以下步驟:
1.整合碼圖生成庫:選擇一個合適的庫來生成二維碼或條形碼。
2.配置碼圖引數:設定碼圖的型別、文字內容、尺寸等引數。
3.生成碼圖:使用庫提供的API生成碼圖。
4.顯示和使用碼圖:將生成的碼圖顯示在介面上或用於其他用途。
使用場景
由於碼圖生成能力支援將字串轉換為自定義格式的碼圖,包含條形碼、二維碼生成,實際應用中可以將字串轉成聯絡人碼圖,手機克隆碼圖,比如將"HarmonyOS"字串生成碼圖使用。
文字生成碼圖的約束與限制
根據鴻蒙官方的介紹,文字生成碼圖的功能支援十三種碼圖生成,每種碼圖對生成引數有不同的要求,關於碼圖的限制請參照下面的表格內容:
需要說明的是:
- 碼圖顏色和背景:建議使用預設顏色和背景:黑色碼圖、白色背景。如果碼圖顏色和背景對比度較小會影響識別率。
- 碼圖邊距:建議使用預設邊距1,單位:px,取值範圍:[1, 10]。
碼圖大小:生成QR Code、Data Matrix、Aztec型別的碼圖時,輸入的width和height值相同且均大於等於200小於等於4096,否則生成的碼圖過小會影響識別;生成EAN-8、EAN-13、UPC-A、UPC-E、Codabar、Code 39、Code 93、Code 128、ITF-14、PDF417型別的碼圖時,建議輸入的width和height值比例為2:1,並且width值需大於400,否則生成的碼圖會過小影響識別。
實現文字生成碼圖
關於實現文字生成碼圖的使用,碼圖生成根據傳參內容直接生成所需碼圖,需要傳入固定引數和可選引數,那麼下面分享的示例就是以呼叫碼圖生成能力的createBarcode介面實現碼圖生成,具體操作如下步驟所示。
步驟1:匯入模組
首先匯入碼圖生成介面模組,該模組提供了碼圖生成的引數和方法,具體的匯入方法如下所示:
// 匯入碼圖生成需要的圖片模組、錯誤碼模組
import { scanCore, generateBarcode } from '@kit.ScanKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { image } from '@kit.ImageKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
步驟2:呼叫碼圖生成介面
接下來是呼叫碼圖生成能力的createBarcode介面實現碼圖生成,分為兩種呼叫方式:透過Promise方式回撥和透過Callback方式回撥,具體操作步驟如下所示:
1、透過Promise方式回撥,獲取生成的碼圖,具體操作如下所示:
@Entry
@Component
struct Index {
@State pixelMap: image.PixelMap | undefined = undefined
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Button('generateBarcode Promise').onClick(() => {
// 以QR碼為例,碼圖生成引數
this.pixelMap = undefined;
let content: string = 'huawei';
let options: generateBarcode.CreateOptions = {
scanType: scanCore.ScanType.QR_CODE,
height: 400,
width: 400
}
try {
// 碼圖生成介面,成功返回PixelMap格式圖片
generateBarcode.createBarcode(content, options).then((pixelMap: image.PixelMap) => {
this.pixelMap = pixelMap;
}).catch((error: BusinessError) => {
})
} catch (error) {
}
})
// 獲取生成碼後顯示
if (this.pixelMap) {
Image(this.pixelMap).width(300).height(300).objectFit(ImageFit.Contain)
}
}
.width('100%')
.height('100%')
}
}
2、透過Callback方式回撥,獲取生成的碼圖,具體操作如下所示:
@Entry
@Component
struct Index {
@State pixelMap: image.PixelMap | undefined = undefined
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Button('generateBarcode Callback').onClick(() => {
// 以QR碼為例,碼圖生成引數
let content = 'huawei';
let options: generateBarcode.CreateOptions = {
scanType: scanCore.ScanType.QR_CODE,
height: 400,
width: 400
}
try {
// 碼圖生成介面,成功返回PixelMap格式圖片
generateBarcode.createBarcode(content, options, (error: BusinessError, pixelMap: image.PixelMap) => {
if (error) {
return;
}
this.pixelMap = pixelMap;
})
} catch (error) {
}
})
// 獲取生成碼後顯示
if (this.pixelMap) {
Image(this.pixelMap).width(300).height(300).objectFit(ImageFit.Contain)
}
}
.width('100%')
.height('100%')
}
}
步驟4:特別說明:關於模擬器使用
據悉,目前暫不支援模擬器使用文字生成碼圖的功能,如果呼叫會返回錯誤資訊“Emulator is not supported.”
自定義碼圖
除了上面基本的碼圖生成的功能,我們還可以根據應用的需求自定義碼圖行為,比如下面的操作:
- 自定義碼圖樣式:改變碼圖的顏色、邊框等樣式。
碼圖尺寸調整:根據需要調整碼圖的尺寸。
結束語
透過文字詳細介紹,不難看出生成碼圖是HarmonyOS開發中的一項實用功能,它為應用提供了便捷的資訊分享和資料驗證能力,想必大家都應該瞭解瞭如何在HarmonyOS應用中實現文字到碼圖的轉換,也可以看到鴻蒙原生應用自帶的文字生成碼圖的強大能力。隨著技術的不斷發展,碼圖的生成功能將在HarmonyOS生態中繼續扮演重要的角色,給大家帶來更加豐富和方便的體驗。