使用Go語言製作二維碼
二維碼作為一種快速的輸入手段越來越流行,支付,新增好友,買東西,掃個二維碼就可以,非常方便。那麼二維碼是如何製作生成的呢?我們如何製作自己的二維碼呢? |
二維條碼是指在一維條碼的基礎上擴充套件出另一維具有可讀性的條碼,使用黑白矩形圖案表示二進位制資料,被裝置掃描後可獲取其中所包含的資訊。一維條碼的寬度記載著資料,而其長度沒有記載資料。二維條碼的長度、寬度均記載著資料。二維條碼有一維條碼沒有的“定位點”和“容錯機制”。容錯機制在即使沒有辨識到全部的條碼、或是說條碼有汙損時,也可以正確地還原條碼上的資訊。
以上節選自維基百科。
使用Go語言程式設計時,生成任意內容的二維碼是非常方便的,因為我們有go-qrcode這個庫。該庫的原始碼託管在github上,大家可以下載使用 。
這個庫的使用很簡單,假如我要以我的部落格網站地址生成一張256*256的圖片,可以使用如下程式碼:
import "github.com/skip2/go-qrcode" func main() { qrcode.WriteFile("/",qrcode.Medium,256,"./blog_qrcode.png") }
這樣我們執行程式碼的時候,就在當前目錄下,生成一張256*256的二維碼,掃描後可以看到內容是/。
func WriteFile(content string, level RecoveryLevel, size int, filename string) error
WriteFile函式的原型定義如上,它有幾個引數,大概意思如下:
- content表示要生成二維碼的內容,可以是任意字串。
- level表示二維碼的容錯級別,取值有Low、Medium、High、Highest。
- size表示生成圖片的width和height,畫素單位。
- filename表示生成的檔名路徑。
RecoveryLevel型別其實是個int,它的定義和常量如下。
type RecoveryLevel int const ( // Level L: 7% error recovery. Low RecoveryLevel = iota // Level M: 15% error recovery. Good default choice. Medium // Level Q: 25% error recovery. High // Level H: 30% error recovery. Highest )
RecoveryLevel越高,二維碼的容錯能力越好。
有時候我們不想直接生成一個PNG檔案儲存,我們想對PNG圖片做一些處理,比如縮放了,旋轉了,或者網路傳輸了等,基於此,我們可以使用Encode函式,生成一個PNG 圖片的位元組流,這樣我們就可以進行各種處理了。
func Encode(content string, level RecoveryLevel, size int) ([]byte, error)
用法和WriteFile函式差不多,只不過返回的是一個[]byte位元組陣列,這樣我們就可以對這個位元組陣列進行處理了。
除了以上兩種快捷方式,該庫還為我們提供了對二維碼的自定義方式,比如我們可以自定義二維碼的前景色和背景色等。qrcode.New函式可以返回一個*QRCode,我們可以對*QRCode設定,實現對二維碼的自定義。
比如我們設定背景色為綠色,前景色為白色的二維碼
func main() { qr,err:=qrcode.New(") if err != nil { log.Fatal(err) } else { qr.BackgroundColor = color.RGBA{50,205,50,255} qr.ForegroundColor = color.White qr.WriteFile(256,"./blog_qrcode.png") } }
指定*QRCode的BackgroundColor和ForegroundColor即可。然後呼叫WriteFile方法生成這個二維碼檔案。
func New(content string, level RecoveryLevel) (*QRCode, error) // A QRCode represents a valid encoded QRCode.type QRCode struct { // Original content encoded. Content string // QR Code type. Level RecoveryLevel VersionNumber int // User settable drawing options. ForegroundColor color.Color BackgroundColor color.Color }
以上QRCode的這些欄位都是可以設定的,這樣我們就可以靈活自定義二維碼了。
二維碼是一種流行的輸入技術手段,不光Go可以生成,其他語言也可以生成,並且生成的二維碼是標準的,都可以掃描和識別,比如Java可以透過這個庫來生成。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2712142/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- 動態二維碼免費製作
- [譯] Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- go語言使用Go
- Go語言複製檔案Go
- C語言 二維陣列課題程式碼C語言陣列
- 製作 Rust 語言非同步 ORM 框架(Mybatis)第二彈Rust非同步ORM框架MyBatis
- 二、Go語言基礎:go install與go fmt命令使用示例詳解Go
- GO語言學習——切片二Go
- Go語言字串高效拼接(二)Go字串
- Go 語言介面詳解(二)Go
- 願碼(ChainDesk.CN):Go語言入門指南(二)AIGo
- 前端如何優雅的製作帶LOGO的二維碼前端Go
- 使用 ABAP 程式碼製作手機能夠掃描的二維碼(QRCode)試讀版
- 檔案複製(Go語言實現)Go
- 帶讀 |《Go in Action》(中文:Go語言實戰)語法和語言結構概覽 (二)Go
- Go語言核心36講(Go語言基礎知識二)--學習筆記Go筆記
- Go語言核心36講(Go語言進階技術二)--學習筆記Go筆記
- Go語言————1、初識GO語言Go
- go語言json的使用技巧GoJSON
- 數錢遊戲連結、二維碼,怎樣快速製作遊戲
- three.js 製作屬於自己的動態二維碼JS
- 第二小節 go 語言設計Go
- 用 Go 語言 buffered channel 實作 Job QueueGo
- 用 Go 語言實作 Job Queue 機制Go
- Go語言核心36講(Go語言實戰與應用二)--學習筆記Go筆記
- GO語言————7.5 切片的複製與追加Go
- Java和Go語言二選一,選擇哪門語言好?JavaGo
- Uber Go 語言編碼規範Go
- 使用 Go 語言建立 WebSocket 服務GoWeb
- 使用Go語言建立WebSocket服務GoWeb
- Go語言使用swagger生成介面文件GoSwagger
- GO語言————2、GO語言環境安裝Go
- 【Go語言繪圖】圖片新增文字(二)Go繪圖
- [Go語言寫介面]一、使用xcgui完成go語言第一個軟體介面GoGUI
- GO語言————6.7 將函式作為引數Go函式
- 小巧實用的二維碼製作生成工具:QR Creator PRO Mac版Mac
- [實戰]製作簡單的公眾號二維碼關注圖