最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)對二維碼數(shù)據(jù)進行壓縮

 更新時間:2023年02月15日 09:27:52   作者:神奇代碼在哪里_  
當前二維碼的應用越來越廣泛,包括疫情時期的健康碼也是應用二維碼的典型案例。本文的目標很明確,就是使用python,實現(xiàn)一張二維碼顯示更多信息,代碼簡單實用,感興趣的可以了解一下

前言

當前二維碼的應用越來越廣泛,包括疫情時期的健康碼也是應用二維碼的典型案例,最近需要通過一張二維碼顯示較多文本數(shù)據(jù),也就是對二維碼數(shù)據(jù)進行壓縮,使用CSDN搜索了半天居然沒有能簡單使用的代碼,很多事例代碼解決不了字符編碼、中文亂碼等常見問題。因此只能自己研究了。

本文的目標很明確,就是使用python,實現(xiàn)一張二維碼顯示更多信息,代碼簡單實用,不亂碼,支持中文,copy就能運行,支持txt、doc、wps、docx、xls、xlsx、pdf、gif、jpg、png、mp4、avi、mp3等所有文件格式,壓縮、生成、讀取二維碼一個py文件實現(xiàn)。

以下是程序的代碼文件結(jié)構(gòu),盡量簡單易用。

一、二維碼數(shù)據(jù)的壓縮和寫入

1.讀取二進制文件數(shù)據(jù)

使用二進制文件,避免了由于字符編碼導致的各種問題,很多博客中的事例代碼對中文支持很不友好,導致經(jīng)常出現(xiàn)亂碼、截斷等問題,所以文本的數(shù)據(jù)源使用二進制代碼盡量避開文字編碼問題。下圖是待壓縮進二維碼的一個txt文檔,當然還可以是pdf、word、excel等文件。

代碼如下:

# 使用二進制模式讀取以_file_path為路徑的文件
    _file = open(_file_path, mode="rb")
    _contents = _file.read()

2.壓縮二進制文件數(shù)據(jù)

使用zlib.compress()方法對二進制數(shù)據(jù)進行壓縮。

# 對數(shù)據(jù)進行壓縮
    _contents_zip = zlib.compress(_contents, zlib.Z_BEST_COMPRESSION)

3.使用base64對壓縮后的二進制文件數(shù)據(jù)進行編碼

使用base64編碼可以避免很多編碼轉(zhuǎn)換問題,而且base64編碼都是由英文字符組成,非常方便程序員調(diào)試和對比前后數(shù)據(jù)是否一致。

# 轉(zhuǎn)換為_base64格式方便數(shù)據(jù)傳輸
    _contents_base64 = base64.b64encode(_contents_zip)
    _temp_str_utf8 = _contents_base64.decode('utf-8')
    print("壓縮進二維碼的base64編碼為:%s" % _temp_str_utf8)

程序運行后結(jié)果如下圖:

4.將編碼后的數(shù)據(jù)寫入二維碼

創(chuàng)建QRCode對象后,可使用.add_data()方法向二維碼加入數(shù)據(jù),確認數(shù)據(jù)全部加入后使用.make_image()在內(nèi)存中生成二維碼,最后使用.save()就可以保存二維碼圖片到電腦指定位置。

# 創(chuàng)建QRCode對象
    _qr = qrcode.QRCode()
    # 向二維碼添加數(shù)據(jù)
    _qr.add_data(_temp_str_utf8, 0)
    # 生成二維碼并保存
    _image = _qr.make_image()
    _image.save("compress_qrcode.png")

程序運行后,二維碼圖片保存位置如下圖:

打開二維碼如下:

二、讀取壓縮后的二維碼數(shù)據(jù)

1.識別二維碼圖片并讀取數(shù)據(jù)

使用python的pyzbar庫即可實現(xiàn)二維碼的識別,如果發(fā)現(xiàn)pyzbar識別不了那就需要使用opencv相關(guān)庫對圖片進行處理,提高識別的準確性,這里就不展開研究opencv處理圖像的內(nèi)容了。

# 讀取圖片對象
    _image = cv2.imread(_file_path)
    # 使用pyzbar解析二維碼中的數(shù)據(jù)
    _qr_data = pyzbar.decode(_image)

2.使用base64對讀取的數(shù)據(jù)進行解碼

# 識別二維碼并解壓縮
    return_data = read_compress_qrcode("compress_qrcode.png")
    base64_data = return_data[0].data.decode("utf-8")
    print("讀取并解碼后的base64編碼為:%s" % base64_data)
    # 解碼base64數(shù)據(jù)
    bytes_data = base64.b64decode(base64_data)

程序運行后的識別結(jié)果如下圖,可以發(fā)現(xiàn)前后數(shù)據(jù)是一致的。

3.解壓解碼后數(shù)據(jù)

使用zlib.decompress()進行解壓。

# 解壓數(shù)據(jù)
    unzip_bytes_data= zlib.decompress(bytes_data)

4.還原文件數(shù)據(jù)

使用二進制寫方式wb打開文件,把數(shù)據(jù)重新寫入并保存。

# 還原壓縮文件,使用二進制方式寫入文件
    with open("還原后的文件.txt", 'wb') as f:
        f.write(unzip_bytes_data)
        f.close()

程序運行后生成的文件如下圖:

可以看到還原后的文件和壓縮前是一致的。

三、完整源代碼

完整的Python源代碼

以下是完整的python代碼,后續(xù)繼續(xù)優(yōu)化改進。

import zlib
import base64
import qrcode
import cv2
from pyzbar import pyzbar


def compress_qrcode(_file_path):
    """
    把二進制文件壓縮進二維碼的函數(shù)
    :param _file_path: 待壓縮進二維碼的文件路徑
    :return: 無
    """
    # 使用二進制模式讀取以_file_path為路徑的文件
    _file = open(_file_path, mode="rb")
    _contents = _file.read()
    # 對數(shù)據(jù)進行壓縮
    _contents_zip = zlib.compress(_contents, zlib.Z_BEST_COMPRESSION)
    # 轉(zhuǎn)換為_base64格式方便數(shù)據(jù)傳輸
    _contents_base64 = base64.b64encode(_contents_zip)
    _temp_str_utf8 = _contents_base64.decode('utf-8')
    print("壓縮進二維碼的base64編碼為:%s" % _temp_str_utf8)
    # 創(chuàng)建QRCode對象
    _qr = qrcode.QRCode()
    # 向二維碼添加數(shù)據(jù)
    _qr.add_data(_temp_str_utf8, 0)
    # 生成二維碼并保存
    _image = _qr.make_image()
    _image.save("compress_qrcode.png")


def read_compress_qrcode(_file_path):
    # 讀取圖片對象
    _image = cv2.imread(_file_path)
    # 使用pyzbar解析二維碼中的數(shù)據(jù)
    _qr_data = pyzbar.decode(_image)
    # 返回讀取的數(shù)據(jù)
    return _qr_data


if __name__ == '__main__':
    # 壓縮并生成二維碼
    compress_qrcode("待壓縮進二維碼的文件.txt")
    # 識別二維碼并解壓縮
    return_data = read_compress_qrcode("compress_qrcode.png")
    base64_data = return_data[0].data.decode("utf-8")
    print("讀取并解碼后的base64編碼為:%s" % base64_data)
    # 解碼base64數(shù)據(jù)
    bytes_data = base64.b64decode(base64_data)
    # 解壓數(shù)據(jù)
    unzip_bytes_data= zlib.decompress(bytes_data)
    # 還原壓縮文件,使用二進制方式寫入文件
    with open("還原后的文件.txt", 'wb') as f:
        f.write(unzip_bytes_data)
        f.close()

到此這篇關(guān)于Python實現(xiàn)對二維碼數(shù)據(jù)進行壓縮的文章就介紹到這了,更多相關(guān)Python二維碼數(shù)據(jù)壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 教你用Python來制作一個自動搶票的腳本小程序

    教你用Python來制作一個自動搶票的腳本小程序

    大麥網(wǎng),是中國綜合類現(xiàn)場娛樂票務(wù)營銷平臺,業(yè)務(wù)覆蓋演唱會、 話劇、音樂劇、體育賽事等領(lǐng)域,但是因為票數(shù)有限,還有黃牛們不能丟了飯碗,所以導致了,很多人都搶不到票,那么,今天帶大家用Python來制作一個自動搶票的腳本小程序,需要的朋友可以參考下
    2023-07-07
  • Windows下Anaconda安裝、換源與更新的方法

    Windows下Anaconda安裝、換源與更新的方法

    這篇文章主要介紹了Windows下Anaconda安裝、換源與更新的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Python模塊Typing.overload的使用場景分析

    Python模塊Typing.overload的使用場景分析

    在 Python 中,typing.overload 是一個用于定義函數(shù)重載的裝飾器,函數(shù)重載是指在一個類中可以定義多個相同名字但參數(shù)不同的函數(shù),使得在調(diào)用函數(shù)時可以根據(jù)參數(shù)的不同選擇不同的函數(shù)執(zhí)行,這篇文章主要介紹了Python模塊Typing.overload的使用,需要的朋友可以參考下
    2024-02-02
  • Python SMTP發(fā)送電子郵件的示例

    Python SMTP發(fā)送電子郵件的示例

    這篇文章主要介紹了Python SMTP發(fā)送電子郵件的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • python 讀取yaml文件的兩種方法(在unittest中使用)

    python 讀取yaml文件的兩種方法(在unittest中使用)

    這篇文章主要介紹了python 讀取yaml文件的兩種方法(在unittest中使用),幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-12-12
  • Python機器學習庫scikit-learn使用詳解

    Python機器學習庫scikit-learn使用詳解

    scikit-learn是Python中最流行的機器學習庫之一,它提供了各種各樣的機器學習算法和工具,包括分類、回歸、聚類、降維等
    2023-03-03
  • python中使用.py配置文件的方法詳解

    python中使用.py配置文件的方法詳解

    這篇文章主要介紹了python中使用.py配置文件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Python中的數(shù)字類型與轉(zhuǎn)換技巧示例講解

    Python中的數(shù)字類型與轉(zhuǎn)換技巧示例講解

    這篇文章主要為大家介紹了Python中的數(shù)字類型與轉(zhuǎn)換技巧示例講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 使用Python內(nèi)置模塊與函數(shù)進行不同進制的數(shù)的轉(zhuǎn)換

    使用Python內(nèi)置模塊與函數(shù)進行不同進制的數(shù)的轉(zhuǎn)換

    這篇文章主要介紹了使用Python內(nèi)置模塊與函數(shù)進行不同進制的數(shù)的轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • python list轉(zhuǎn)置和前后反轉(zhuǎn)的例子

    python list轉(zhuǎn)置和前后反轉(zhuǎn)的例子

    今天小編就為大家分享一篇python list轉(zhuǎn)置和前后反轉(zhuǎn)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08

最新評論

石林| 松潘县| 乳山市| 湖北省| 饶平县| 巴东县| 渝中区| 潼南县| 德昌县| 金塔县| 措勤县| 措美县| 广昌县| 大厂| 大方县| 汝城县| 南溪县| 平武县| 大英县| 内丘县| 澄迈县| 晋中市| 林州市| 乌什县| 德兴市| 会宁县| 长兴县| 九龙坡区| 扎鲁特旗| 广东省| 呼和浩特市| 青浦区| 陇川县| 海兴县| 龙江县| 贵溪市| 双峰县| 江安县| 同德县| 旌德县| 沂水县|