<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Go語言生成二維碼是如此簡單

          共 2661字,需瀏覽 6分鐘

           ·

          2020-08-09 05:41

          二維碼作為一種快速的輸入手段越來越流行,支付,添加好友,買東西,掃個二維碼就可以,非常方便。那么二維碼是如何制作生成的呢?我們?nèi)绾沃谱髯约旱亩S碼呢?

          什么是二維碼?

          二維條碼是指在一維條碼的基礎(chǔ)上擴(kuò)展出另一維具有可讀性的條碼,使用黑白矩形圖案表示二進(jìn)制數(shù)據(jù),被設(shè)備掃描后可獲取其中所包含的信息。一維條碼的寬度記載著數(shù)據(jù),而其長度沒有記載數(shù)據(jù)。二維條碼的長度、寬度均記載著數(shù)據(jù)。二維條碼有一維條碼沒有的“定位點(diǎn)”和“容錯機(jī)制”。容錯機(jī)制在即使沒有辨識到全部的條碼、或是說條碼有污損時,也可以正確地還原條碼上的信息。

          以上節(jié)選自維基百科。

          Go語言生成二維碼圖片

          使用Go語言編程時,生成任意內(nèi)容的二維碼是非常方便的,因?yàn)槲覀冇?code style="white-space:pre-wrap;font-family: Avenir, PT-sans;background-color: rgb(248, 248, 248);padding: 0.2em 0.5em;font-size: 14px;border-radius: 2px;display: inline;word-break: normal;">go-qrcode這個庫。該庫的源代碼托管在github上,大家可以下載使用 https://github.com/skip2/go-qrcode。

          這個庫的使用很簡單,假如我要以我的博客網(wǎng)站地址http://www.flysnow.org生成一張256*256的圖片,可以使用如下代碼:

          import "github.com/skip2/go-qrcode"

          func main() {
          ? ?qrcode.WriteFile("http://www.flysnow.org/",qrcode.Medium,256,"./blog_qrcode.png")
          }

          這樣我們運(yùn)行代碼的時候,就在當(dāng)前目錄下,生成一張256*256的二維碼,掃描后可以看到內(nèi)容是http://www.flysnow.org/

          func WriteFile(content string, level RecoveryLevel, size int, filename string) error

          WriteFile函數(shù)的原型定義如上,它有幾個參數(shù),大概意思如下:

          1. content表示要生成二維碼的內(nèi)容,可以是任意字符串。

          2. level表示二維碼的容錯級別,取值有Low、Medium、High、Highest。

          3. size表示生成圖片的width和height,像素單位。

          4. filename表示生成的文件名路徑。

          RecoveryLevel類型其實(shí)是個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越高,二維碼的容錯能力越好。

          生成二維碼圖片字節(jié)

          有時候我們不想直接生成一個PNG文件存儲,我們想對PNG圖片做一些處理,比如縮放了,旋轉(zhuǎn)了,或者網(wǎng)絡(luò)傳輸了等,基于此,我們可以使用Encode函數(shù),生成一個PNG 圖片的字節(jié)流,這樣我們就可以進(jìn)行各種處理了。

          func Encode(content string, level RecoveryLevel, size int) ([]byte, error)

          用法和WriteFile函數(shù)差不多,只不過返回的是一個[]byte字節(jié)數(shù)組,這樣我們就可以對這個字節(jié)數(shù)組進(jìn)行處理了。

          自定義二維碼

          除了以上兩種快捷方式,該庫還為我們提供了對二維碼的自定義方式,比如我們可以自定義二維碼的前景色和背景色等。qrcode.New函數(shù)可以返回一個*QRCode,我們可以對*QRCode設(shè)置,實(shí)現(xiàn)對二維碼的自定義。

          比如我們設(shè)置背景色為綠色,前景色為白色的二維碼

          func main() {
          ? ?qr,err:=qrcode.New("http://www.flysnow.org/",qrcode.Medium)
          ? ?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")
          ? ?}
          }

          指定*QRCodeBackgroundColorForegroundColor即可。然后調(diào)用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的這些字段都是可以設(shè)置的,這樣我們就可以靈活自定義二維碼了。

          小結(jié)

          二維碼是一種流行的輸入技術(shù)手段,不光Go可以生成,其他語言也可以生成,并且生成的二維碼是標(biāo)準(zhǔn)的,都可以掃描和識別,比如Java可以通過這個https://github.com/kenglxn/QRGen庫來生成。




          推薦閱讀



          學(xué)習(xí)交流 Go 語言,掃碼回復(fù)「進(jìn)群」即可


          站長 polarisxu

          自己的原創(chuàng)文章

          不限于 Go 技術(shù)

          職場和創(chuàng)業(yè)經(jīng)驗(yàn)


          Go語言中文網(wǎng)

          每天為你

          分享 Go 知識

          Go愛好者值得關(guān)注


          瀏覽 53
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人在线三级 | 色五月丁香影音先锋 | 69视频网在线观看 | 五月婷婷丁香在线导航 | 国产三级片网站在线观看 |