999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Python的個性二維碼設計與實現

2019-07-23 01:51:16岐艷芳
科技視界 2019年15期

岐艷芳

【摘 要】隨著掃碼支付等應用的普及,二維碼在現實生活中的應用越來越普遍。Python作為目前世界上流行的編程語言,具有豐富和強大的庫,幾乎涵蓋了計算機技術的各個領域。本文簡述了二維碼的結構及繪制過程,著重講解基于Python生成個性二維碼及解析的設計實現過程,較詳細闡述了Python第三方庫qrcode、zbarlight等庫的具體使用,從而生成炫酷個性的二維碼藝術圖案。

【關鍵詞】二維碼;Python;生成;解析

中圖分類號: TP391.44;TP393.092文獻標識碼: A文章編號: 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

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

1 二維碼概述

1.1 二維碼

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

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

1.2 二維碼結構

1.2.1 功能圖形

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

空白區:顧名思義就是要留空白,以保證QR能被識別。

位置探測圖形:類似中文的“回”字。在QR碼標識中,位于左上、右上和左下角,作用是協助掃描軟件定位QR碼并轉換坐標系。

位置探測圖形分隔符:主要作用是區分功能圖形和編碼區域。

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

校正圖形:用于進一步校正坐標系。

1.2.2 編碼區域

編碼區域是數據進行編碼存儲的區域,它由格式信息、版本信息、數據和糾錯碼字三部分構成。

格式信息:存放一些格式化數據的信息,例如容錯級別、數據掩碼等。

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

數據和糾錯碼:主要是存儲實際數據以及用于糾錯碼字。

1.3 二維碼的繪制過程

二維碼的繪制過程簡述如下:

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

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

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

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

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

(6)填充數據碼和糾錯碼到二維碼圖中;

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

2 基于Python生成個性二維碼

要用Python生成二維碼,首先需要下載Python的二維碼庫qrcode。qrcode庫是用于生成二維碼圖像的Python第三方庫。qrcode 運行在 Python 3 版本上,該庫能生成三種二維碼圖片:普通二維碼、帶圖片的藝術二維碼以及動態二維碼。它比較適合直接用于生成二維碼圖片的場景。

2.1 基本二維碼生成

(1)安裝Python第三方庫。可以使用 pip 方式。但是該庫依賴 pillow、numpy 和matplotlib。因此,我們需要先安裝依賴庫,再安裝qrcode庫,導入安裝庫。

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

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

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

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

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

plt.show()

得到結果如圖1所示。

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

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)循環二維碼圖片中各個像素點,其中三個定位圖案和有效數據不能替換

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)))

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

2.2 動態二維碼的生成

生成一個有動態效果的二位碼,步驟和簡單二維碼生成類似,區別在于使用的是二維碼加動圖GIF。

設計步驟:先將上面的過程封裝為一個函數,讀取Gif圖片,循環掃描Gif圖片中的所有幀數,形成循環圖片列表,并將結果存到一個新的數組中,最后合并圖片組到新的gif文件中。就可得到動態效果的二位碼,結果如圖3所示。

循環掃描Gif圖片中的所有幀數,形成循環圖片列表的代碼如下:

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庫,zbarlight二維碼解析包目前僅僅支持Python2.7以下版本。解析二維碼信息,返回二維碼信息的函數代碼如下:

import zbar

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

scanner = zbar.ImageScanner()#創建圖片掃描對象

scanner.parse_config('enable')#設置對象屬性

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

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

#建立zbar圖片對象并掃描轉換為字節信息

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

scanner.scan(qrCode)

data= ''#組裝解碼信息

for s in qrCode:

data+=s.data

delimg#刪除圖片對象

return data#輸出解碼結果

4 結語

Python作為目前世界上流行的編程語言,具有豐富和強大的庫,幾乎涵蓋了計算機技術的各個領域,具有良好的編程生態,在圖像處理以及數字識別領域也已經發揮了其重要作用,本文主要探討了基于Python的二維碼生成與解析技術,還可以在此基礎上繼續擴展,生成更加炫酷的二維碼藝術圖案,同時該方法也可廣泛應用于其他相關領域。

【參考文獻】

[1]劉蓮,等.基于Android手機的二維碼識別生成系統的設計與實現[J].福建電腦,2018(12).

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

[3]朱亞林.一種基于Python的二維碼傳輸系統的設計與實現[J].中小學電教,2018(12).

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

主站蜘蛛池模板: 99尹人香蕉国产免费天天拍| 久久成人国产精品免费软件| 日本精品视频| 国产日本欧美在线观看| 中国特黄美女一级视频| 亚洲成年人片| 国产在线一区视频| 久久精品国产91久久综合麻豆自制| 国产真实乱子伦精品视手机观看| 欧美第二区| 99偷拍视频精品一区二区| 美女亚洲一区| 亚洲成人免费看| 57pao国产成视频免费播放| 亚洲色图欧美在线| 欧美另类精品一区二区三区| 综合色区亚洲熟妇在线| 国产一级在线播放| 婷婷在线网站| 亚洲一区二区日韩欧美gif| 日本人又色又爽的视频| 九九线精品视频在线观看| 国产青青操| 日韩精品无码免费一区二区三区| 91在线播放国产| 无码啪啪精品天堂浪潮av| 亚洲国产AV无码综合原创| 一级做a爰片久久免费| 99久久人妻精品免费二区| 91久久国产成人免费观看| 日韩精品成人在线| 99视频有精品视频免费观看| 无码一区中文字幕| 日本黄色a视频| 波多野结衣亚洲一区| 在线免费观看AV| 亚洲水蜜桃久久综合网站| 天天做天天爱夜夜爽毛片毛片| 亚洲国产日韩欧美在线| 91午夜福利在线观看| 国产美女无遮挡免费视频| 五月天久久综合| 福利一区三区| 日本日韩欧美| 欧美激情综合一区二区| 国产人在线成免费视频| 日本a∨在线观看| 成人在线欧美| 五月天香蕉视频国产亚| 青草视频在线观看国产| 55夜色66夜色国产精品视频| 9999在线视频| 成人午夜视频免费看欧美| 国产国产人成免费视频77777| 97se亚洲综合在线天天| 无码粉嫩虎白一线天在线观看| 日本免费高清一区| 欧美国产日韩在线播放| 欧美精品成人| 精品久久久无码专区中文字幕| 国产亚洲精品91| 丁香婷婷激情网| 这里只有精品国产| 欧美在线导航| 中文字幕无码中文字幕有码在线| 六月婷婷综合| 午夜视频免费试看| 亚洲成人黄色在线观看| 九九九国产| 极品国产一区二区三区| 无码中文字幕精品推荐| 亚洲欧洲自拍拍偷午夜色| 久久99这里精品8国产| 久久久亚洲色| 中文一区二区视频| 亚洲一区二区精品无码久久久| 国产成人精品优优av| 欧美精品v欧洲精品| 日本一区高清| 伊人久久久久久久| 国产91色在线| 久久亚洲日本不卡一区二区|