<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      上次玩數(shù)獨(旁友數(shù)獨會伐啦?python秒解數(shù)獨了解下伐啦?
      <https://blog.csdn.net/moonhmilyms/article/details/98711840>
      )的事情給老王氣的……這次我直接掏出了照片,看看他的反應。

      小胖這次要人碼結(jié)合,看看他鬧哪樣。

      那作為一名合格的程序員,怎么能不懂二維碼是如何生成,如何解析,如何玩耍的呢?廢話不多說,咱們今天就用Python來玩玩這個人碼合一。

      演示環(huán)境

      * 操作系統(tǒng):windows10
      * python版本:python 3.7
      * 代碼編輯器:pycharm 2018.2
      * 使用模塊:zxing,myqr,qrcode
      * tips: 上面的模塊都使用pip安裝,它們依賴的模塊也會自動安裝,相信會Python的你對pip不會太陌生。 pip install qrcode
      pip install myqr pip install zxing
      使用qrcode模塊生成二維碼

      首先我們來生成一個 “Hello World”。
      import qrcode def first_demo(): # 存儲的字符串 qr = qrcode.make('Hello World')
      qr.get_image().show()
      通過上面的步驟就完成了這個經(jīng)典入門,拿出你的手機,用微信、QQ掃碼,就會出現(xiàn)“Hello World”字眼,有沒有勾起你初學Python的回憶呢。

      剛才只是小試牛刀,我們來一個進階,把生成的二維碼保存到本地。
      import qrcode def second_demo(): text = 'Python專欄' img = qrcode.make(text) #
      需要傳一個參數(shù) 文件名 img.save('qr.png') img.show()


      我公眾號二維碼大家應該很熟悉了吧,上面步驟生成的都是純二維碼,不符合我們的氣質(zhì)。接下來我要使用qrcode庫生成帶有內(nèi)嵌圖片的二維碼。
      from PIL import Image import qrcode def create_icon_qrcode(): qr =
      qrcode.QRCode( # 二維碼size尺寸大小。官方稱為version version=1, # 二維碼錯誤處理級別,有四種方式,稍后給出解釋
      error_correction=qrcode.constants.ERROR_CORRECT_H, # 二維碼圖片的大小 box_size=10, #
      二維碼白色邊框的大小 border=2 ) # 添加數(shù)據(jù) qr.add_data('小可愛你好,我是波多野結(jié)衣老濕') # 填充數(shù)據(jù)
      qr.make(fit=True) # 生成二維碼圖片 指定填充顏色 指定背景顏色 img =
      qr.make_image(fill_color='grey',back_color='white') # 得到生成的二維碼圖片的寬,高
      img_w,img_h = img.size # 添加圖片到二維碼中 # 使用pillow的Image打開圖片 icon =
      Image.open('girl.jpg') # 設置icon的大小,為二維碼圖片大小的6分之一 factor = 3 size_w = img_w //
      factor size_h = img_h // factor # 得到icon圖片的大小 icon_w,icon_h = icon.size #
      只有當我們icon圖片的大小超過了二維碼圖片的3分之一的時候,才對icon圖片大小重新定義大小。 if icon_w > size_w: icon_w =
      size_w if icon_h > size_h: icon_h = size_h # 重新設置icon的尺寸 icon =
      icon.resize((icon_w,icon_h),Image.ANTIALIAS) # 得到在二維碼中顯示的位置,坐標。 w = (img_w -
      icon_w) // 2 h = (img_h - icon_h) // 2 img.paste(icon,(w,h),mask=None)
      img.save('girl.png')
      這里說一下version參數(shù)和error_correction參數(shù):

      * version:
      就是二維碼圖片的size,官方稱作為version。version為1的時候,二維碼就是2121組成的正方形,version為2的話就是2525,version為3的話就是2929。最大為40。所以說最大的尺寸為(40
      - 1) * 4 + 21 = 177. 也就是177177 正方形。
      * error_correction: 糾錯級別,級別越高,糾錯能力越強。這也就是為什么我們的二維碼殘缺了一點點,也能夠正確的讀取到信息的原因。
      錯誤修正容量

      * L水平: 7%的字碼可被修正
      * M水平: 15%的字碼可被修正
      * Q水平: 25%的字碼可被修正
      * H水平: 30%的字碼可被修正
      通過上面的步驟,就生成了一張灰色背景填充的二維碼,最最核心的中間部分……她是誰?



      github地址: https://github.com/lincolnloop/python-qrcode

      上面就是qrcode庫的基本使用。接下來再介紹一下MyQr庫。這個庫就相當強大,強大到可以使用圖片作為二維碼的背景,甚至是動態(tài)圖。

      使用MyQr模塊生成二維碼
      import os from MyQR import myqr def myqr_demo(): # 注意,這里的字符串不能出現(xiàn)中文,只能以下這些 #
      supported_chars =
      r"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
      ··,.:;+-*/\~!@#$%^&`'=<>[]()?_{}|" words = 'hello world' #
      調(diào)用myqr.run方法,就能夠生成圖片了。返回三個值,二維碼的version,糾錯級別,二維碼的完整路徑 version, level, qr_name =
      myqr.run( # 存放的數(shù)據(jù) words=words, # 二維碼size version=10, # 選取的背景圖片
      picture='girl.jpg', # 是否為彩色。如果為False,那么就是黑白的 colorized=True, # 保存到本地的名字
      save_name='girl_img.png', # 保存二維碼的目錄,這里就是當前目錄。默認就是這個 save_dir=os.getcwd() )
      print(version,level,qr_name)
      執(zhí)行以上代碼,我們就可以生成一張以我們圖片作為背景的二維碼。



      如果需要將動態(tài)圖作為背景圖,其實也和正常的背景圖類似,只需要寫入背景圖的文件名就行了,然后保存圖片的時候,將二維碼的后綴名改成gif即可.

      github地址: https://github.com/sylnsfar/qrcode

      這里簡單的比較一下這兩個庫吧

      * qrcode支持中文數(shù)據(jù),而myqr不支持中文等字符。
      * qrcode不能設置背景圖,但是能將圖片放在二維碼中間。
      * myqr可以將背景設置為圖片,并且允許為動態(tài)圖。
      使用zxing庫解析二維碼

      上面我們只說了如何生成二維碼圖片。接下來介紹下如何解析二維碼中的信息。
      import zxing def parse_qrcode(filename): reader = zxing.BarCodeReader()
      barcode = reader.decode(filename) print(barcode.parsed)
      短短的幾行代碼,就能解析出復雜而又簡單的二維碼,并且得到里面的詳細數(shù)據(jù)。

      注意:如果二維碼中的數(shù)據(jù)包含中文,那么應該會報這樣的錯誤。UnicodeDecodeError: 'utf-8' codec can't decode
      byte 0xc0 in position 0: invalid start byte 這個時候只需要修改一下這個庫的源碼就行了。

      修改位置在zxing包下面的 __init__.py 文件中第81行代碼處。

      原來是這樣的
      raw = raw[:-1].decode() parsed = parsed[:-1].decode() return cls(format, type,
      raw, parsed, points)
      需要修改為下面這樣
      raw = raw[:-1].decode(encoding='gbk') parsed =
      parsed[:-1].decode(encoding='gbk') return cls(format, type, raw, parsed, points)
      這樣就不會出錯了。

      這樣,我們就成功的對二維碼進行解析了。


      本文全套代碼已上傳至Github:https://github.com/MiracleYoung/You-are-Pythonista/tree/master/PythonExercise/App/QRcode

      更多好玩有趣的Python內(nèi)容,關(guān)注公眾號「Python專欄」

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          一级黄色视频片 | 《秘爱》床戏高潮 | 波多影院 | 女人张开腿给男人捅 | 欧美精品一区二区三区高清在线 | 国产午夜精品视频一区二区三区 | 国产精品青青 | 日本黄色片视频 | 无码日逼 | 在线欧美|