• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Python的個(gè)性二維碼設(shè)計(jì)與實(shí)現(xiàn)

      2019-07-23 01:51:16岐艷芳
      科技視界 2019年15期
      關(guān)鍵詞:二維碼解析

      岐艷芳

      【摘 要】隨著掃碼支付等應(yīng)用的普及,二維碼在現(xiàn)實(shí)生活中的應(yīng)用越來越普遍。Python作為目前世界上流行的編程語(yǔ)言,具有豐富和強(qiáng)大的庫(kù),幾乎涵蓋了計(jì)算機(jī)技術(shù)的各個(gè)領(lǐng)域。本文簡(jiǎn)述了二維碼的結(jié)構(gòu)及繪制過程,著重講解基于Python生成個(gè)性二維碼及解析的設(shè)計(jì)實(shí)現(xiàn)過程,較詳細(xì)闡述了Python第三方庫(kù)qrcode、zbarlight等庫(kù)的具體使用,從而生成炫酷個(gè)性的二維碼藝術(shù)圖案。

      【關(guān)鍵詞】二維碼;Python;生成;解析

      中圖分類號(hào): TP391.44;TP393.092文獻(xiàn)標(biāo)識(shí)碼: A文章編號(hào): 2095-2457(2019)15-0096-002

      DOI:10.19694/j.cnki.issn2095-2457.2019.15.046

      Design and Implementation of Personal QR Code Based on Python

      QI Yan-fang

      (School of Software Engineering,Lanzhou Institute of Technology,Gansu Lanzhou 730050,China)

      【Abstract】With the popularity of scanning code payment and other applications, The application of QR code in real life is becoming more and more common. Python, as a popular programming language in the world, has rich and powerful libraries, covering almost all fields of computer technology. In this paper, the structure and drawing process of QR code are briefly described, the design and implementation process of generating personalized QR code and parsing based on Python are emphasized, and the concrete use of Python third party library qrcode,zbarlight and other libraries is described in detail. In order to generate cool personality of the QR code art pattern.

      【Key words】QR code; Python; Generation; Parsing

      隨著信息化和工業(yè)化“兩化融合”的廣泛應(yīng)用和深度結(jié)合,二維碼在現(xiàn)實(shí)生活中的應(yīng)用越來越普遍,其中掃碼支付指手機(jī)通過掃描二維碼跳轉(zhuǎn)到支付頁(yè)面,再進(jìn)行付款。這種新的支付方式,已被越來越多的人接受并使用。去年,在“一帶一路”國(guó)際合作高峰論壇舉行期間,20國(guó)青年投票選出中國(guó)的“新四大發(fā)明”:高鐵、掃碼支付、共享單車和網(wǎng)購(gòu)。

      1 二維碼概述

      1.1 二維碼

      二維碼(2-dimensional bar code),是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號(hào)信息。它能將數(shù)字、英文字母、漢字、日文字母、特殊符號(hào)(如空格,%,/ 等)、二進(jìn)制等信息記錄到一個(gè)正方形的圖片中。我們常說的二維碼采用QR code 編碼制,所以,二維碼又被稱為 QR code。

      QR code 是一種矩陣式二維條碼(又稱棋盤式二維條碼)。它是在一個(gè)矩形空間通過黑、白像素在矩陣中的不同分布進(jìn)行編碼。在矩陣相應(yīng)元素位置上,用點(diǎn)(方點(diǎn)、圓點(diǎn)或其他形狀)的出現(xiàn)表示二進(jìn)制“1”,點(diǎn)的不出現(xiàn)表示二進(jìn)制的“0”,點(diǎn)的排列組合確定了矩陣式二維條碼所代表的意義。

      1.2 二維碼結(jié)構(gòu)

      1.2.1 功能圖形

      功能圖形是不參與編碼數(shù)據(jù)的區(qū)域。它包含空白區(qū)、位置探測(cè)圖形、位置探測(cè)圖形分隔符、定位圖形和校正圖形五大模塊。

      空白區(qū):顧名思義就是要留空白,以保證QR能被識(shí)別。

      位置探測(cè)圖形:類似中文的“回”字。在QR碼標(biāo)識(shí)中,位于左上、右上和左下角,作用是協(xié)助掃描軟件定位QR碼并轉(zhuǎn)換坐標(biāo)系。

      位置探測(cè)圖形分隔符:主要作用是區(qū)分功能圖形和編碼區(qū)域。

      定位圖形:由黑白間隔的格子組成的線條,主要用于指示標(biāo)識(shí)密度和確定坐標(biāo)系。

      校正圖形:用于進(jìn)一步校正坐標(biāo)系。

      1.2.2 編碼區(qū)域

      編碼區(qū)域是數(shù)據(jù)進(jìn)行編碼存儲(chǔ)的區(qū)域,它由格式信息、版本信息、數(shù)據(jù)和糾錯(cuò)碼字三部分構(gòu)成。

      格式信息:存放一些格式化數(shù)據(jù)的信息,例如容錯(cuò)級(jí)別、數(shù)據(jù)掩碼等。

      版本信息:規(guī)定二維碼的規(guī)格。QR 碼一共有40種規(guī)格的矩陣。

      數(shù)據(jù)和糾錯(cuò)碼:主要是存儲(chǔ)實(shí)際數(shù)據(jù)以及用于糾錯(cuò)碼字。

      1.3 二維碼的繪制過程

      二維碼的繪制過程簡(jiǎn)述如下:

      (1)在二維碼的左上角、左下角、右上角繪制位置探測(cè)圖形,得到一個(gè)7x7的矩陣;

      (2)繪制校正圖形,得到一個(gè)5x5的矩陣;

      (3)繪制兩條連接三個(gè)位置探測(cè)圖形的定位圖形;

      (4)在上述圖片的基礎(chǔ)上,繼續(xù)繪制格式信息;

      (5)接著繪制版本信息;

      (6)填充數(shù)據(jù)碼和糾錯(cuò)碼到二維碼圖中;

      (7)最后繪制蒙版圖案,從而將數(shù)據(jù)排列成各種圖片。

      2 基于Python生成個(gè)性二維碼

      要用Python生成二維碼,首先需要下載Python的二維碼庫(kù)qrcode。qrcode庫(kù)是用于生成二維碼圖像的Python第三方庫(kù)。qrcode 運(yùn)行在 Python 3 版本上,該庫(kù)能生成三種二維碼圖片:普通二維碼、帶圖片的藝術(shù)二維碼以及動(dòng)態(tài)二維碼。它比較適合直接用于生成二維碼圖片的場(chǎng)景。

      2.1 基本二維碼生成

      (1)安裝Python第三方庫(kù)??梢允褂?pip 方式。但是該庫(kù)依賴 pillow、numpy 和matplotlib。因此,我們需要先安裝依賴庫(kù),再安裝qrcode庫(kù),導(dǎo)入安裝庫(kù)。

      (2)讀取二維碼圖片,并將二維碼轉(zhuǎn)換為所需大小

      qrcode=Image.open('img.png').convert("RGBA")

      src_size=(qrcode.size[0], qrcode.size[1])

      qrcode=qrcode.resize((99, 99))#將二維碼轉(zhuǎn)換為99x99的尺寸

      plt.imshow(qrcode)#顯示當(dāng)前的二維碼圖片

      plt.show()

      得到結(jié)果如圖1所示。

      (3)讀取新的圖片,將新的圖片轉(zhuǎn)換為合適的尺寸

      bg=Image.open('abc.jpeg').convert("RGBA")

      if bg.size[0]

      bg =bg.resize((qrcode.size[0]-24,(qrcode.size[0]-24)*int(bg.size[1]/bg.size[0])))

      else:

      bg=bg.resize(((qrcode.size[1]-24)*int(bg.size[0]/bg.size[1]),qrcode.size[1]-24))

      (4)循環(huán)二維碼圖片中各個(gè)像素點(diǎn),其中三個(gè)定位圖案和有效數(shù)據(jù)不能替換

      for i in range(qrcode.size[0]-24):

      for j in range(qrcode.size[1]-24):#忽略左上角定位圖案

      if i<24 and j<24:

      continue#忽略右上角定位圖案

      elif i<24 and j>qrcode.size[1]-49:

      continue#忽略左下角定位圖案

      elif i>qrcode.size[0]-49 and j<24:

      continue

      elif i%3==1 and j%3==1:

      continue#背景中透明的部分不做處理

      elif bg.getpixel((i,j))[3]==0:

      continue

      else:#用新圖片上的像素替換原有二維碼上

      qrcode.putpixel((i+12,j+12), bg.getpixel((i,j)))

      顯示新的二維碼圖片,得到結(jié)果如圖2所示。

      2.2 動(dòng)態(tài)二維碼的生成

      生成一個(gè)有動(dòng)態(tài)效果的二位碼,步驟和簡(jiǎn)單二維碼生成類似,區(qū)別在于使用的是二維碼加動(dòng)圖GIF。

      設(shè)計(jì)步驟:先將上面的過程封裝為一個(gè)函數(shù),讀取Gif圖片,循環(huán)掃描Gif圖片中的所有幀數(shù),形成循環(huán)圖片列表,并將結(jié)果存到一個(gè)新的數(shù)組中,最后合并圖片組到新的gif文件中。就可得到動(dòng)態(tài)效果的二位碼,結(jié)果如圖3所示。

      循環(huán)掃描Gif圖片中的所有幀數(shù),形成循環(huán)圖片列表的代碼如下:

      gif=Image.open('fish.gif')

      duration=gif.info.get('duration', 0)

      bg_frames=[]

      try:

      i=0

      while 1:

      gif.seek(i)

      gif_copy=gif.copy()

      if i==0:

      palette=gif_copy.getpalette()

      else:

      gif_copy.putpalette(palette)

      bg_frames.append(gif_copy.convert("RGBA"))

      i+=1

      except EOFError:

      pass

      3 Python解析二維碼圖片

      解析二維碼圖片的信息需要使用zbarlight(二維碼解析包),首先安裝zbarlight庫(kù),zbarlight二維碼解析包目前僅僅支持Python2.7以下版本。解析二維碼信息,返回二維碼信息的函數(shù)代碼如下:

      import zbar

      def decode_qrcode(path):#參數(shù)path:二維碼圖片路徑

      scanner = zbar.ImageScanner()#創(chuàng)建圖片掃描對(duì)象

      scanner.parse_config('enable')#設(shè)置對(duì)象屬性

      img =Image.open(path).convert('L')#打開含有二維碼的圖片

      width, height = img.size#獲取圖片的尺寸

      #建立zbar圖片對(duì)象并掃描轉(zhuǎn)換為字節(jié)信息

      qrCode=zbar.Image(width, height, 'Y800', img.tobytes())

      scanner.scan(qrCode)

      data= ''#組裝解碼信息

      for s in qrCode:

      data+=s.data

      delimg#刪除圖片對(duì)象

      return data#輸出解碼結(jié)果

      4 結(jié)語(yǔ)

      Python作為目前世界上流行的編程語(yǔ)言,具有豐富和強(qiáng)大的庫(kù),幾乎涵蓋了計(jì)算機(jī)技術(shù)的各個(gè)領(lǐng)域,具有良好的編程生態(tài),在圖像處理以及數(shù)字識(shí)別領(lǐng)域也已經(jīng)發(fā)揮了其重要作用,本文主要探討了基于Python的二維碼生成與解析技術(shù),還可以在此基礎(chǔ)上繼續(xù)擴(kuò)展,生成更加炫酷的二維碼藝術(shù)圖案,同時(shí)該方法也可廣泛應(yīng)用于其他相關(guān)領(lǐng)域。

      【參考文獻(xiàn)】

      [1]劉蓮,等.基于Android手機(jī)的二維碼識(shí)別生成系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].福建電腦,2018(12).

      [2][美]WESLEY J. CHUN. Core python programmining[M].2012(1).

      [3]朱亞林.一種基于Python的二維碼傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].中小學(xué)電教,2018(12).

      [4]python.org.http.server—HTTP servers. https://docs.python.org/3.6/library/http.server.html. 2018.

      猜你喜歡
      二維碼解析
      可以吃的二維碼
      三角函數(shù)解析式中ω的幾種求法
      二維碼
      童話世界(2020年32期)2020-12-18 18:15:41
      睡夢(mèng)解析儀
      電競(jìng)初解析
      商周刊(2017年12期)2017-06-22 12:02:01
      讓嚴(yán)肅的二維碼呆萌起來
      相機(jī)解析
      二維碼,別想一掃了之
      大城县| 安塞县| 遂川县| 大足县| 台湾省| 青河县| 隆尧县| 邳州市| 南丰县| 当阳市| 林甸县| 丹东市| 沁源县| 曲周县| 汉沽区| 阿瓦提县| 南江县| 渝北区| 乐陵市| 青州市| 五大连池市| 龙海市| 阿巴嘎旗| 伊宁县| 江安县| 无棣县| 洱源县| 金门县| 吴堡县| 信丰县| 克拉玛依市| 华阴市| 南昌县| 乌苏市| 云和县| 西畴县| 百色市| 宜兰县| 遂平县| 潼关县| 玉溪市|