二维码数据压缩实践 | 使用python对二维码数据进行压缩 |不乱码,支持中文

前言

当前二维码的应用越来越广泛,疫情时期的健康码就是二维码应用的典型案例。最近,有一个小项目需要在一张二维码中存储大量的文本数据,因此要对文本进行压缩后再生成对应的二维码图片(压缩二维码数据)。博主在CSDN上搜索了大半天,始终未能找到简单易用的代码,大量事例代码并不能完全解决字符编码中文乱码等问题。

本文介绍一种经验证可行的压缩方法,用Python代码实现一张二维码显示更多信息,力求做到代码简单实用,不乱码支持中文copy就能运行支持txt、doc、wps、docx、xls、xlsx、pdf、gif、jpg、png、mp4、avi、mp3等所有文件格式,压缩、生成、读取二维码使用一个.py文件实现。

程序的代码文件结构如下图👇:
在这里插入图片描述


目录


一、压缩和写入二维码数据

1.读取待压缩文件(二进制)数据

第一步:使用二进制方式读取待压缩文件数据。使用二进制文件,可有效避免字符编码导致的各种奇怪问题,如果直接使用字符串进行压缩和写入,则可能出现不完全支持中文,乱码、文本截断等问题,也是部分博文事例中出现的常见问题。使用二进制还有一个明显的好处,还可以支持.pdf、.word、.excel、mp3等非结构化文件的压缩。下图是一个待读取的.txt文档事例。

在这里插入图片描述
代码如下:

# 使用二进制模式读取以_file_path为路径的文件
    _file = open(_file_path, mode="rb")
    _contents = _file.read()

2.压缩文件数据

第二步:使用zlib.compress()方法对二进制数据进行压缩。

# 对数据进行压缩
    _contents_zip = zlib.compress(_contents, zlib.Z_BEST_COMPRESSION)

3.对压缩后二进制文件数据进行编码(base64编码)

第三步:对压缩后二进制文件数据进行编码。使用base64编码可以避免很多编码转换问题,同时base64编码由英文字符组成,非常方便调试和对比前后数据是否一致。

# 转换为_base64格式方便数据传输
    _contents_base64 = base64.b64encode(_contents_zip)
    _temp_str_utf8 = _contents_base64.decode('utf-8')
    print("压缩进二维码的base64编码为:%s" % _temp_str_utf8)

程序运行结果,如下图:

在这里插入图片描述

4.根据编码后数据生成二维码

第四步:完成base64编码后,再使用qrcode.QRCode()生成二维码。创建QRCode对象后,可使用.add_data()方法向二维码加入数据,确认数据全部加入后使用.make_image()在内存中生成二维码,最后使用.save()就可以保存二维码图片到电脑指定位置。

代码如下:

# 创建QRCode对象
    _qr = qrcode.QRCode()
    # 向二维码添加数据
    _qr.add_data(_temp_str_utf8, 0)
    # 生成二维码并保存
    _image = _qr.make_image()
    _image.save("compress_qrcode.png")

程序运行后,二维码图片保存位置如下图:

在这里插入图片描述

生成的二维码如下图:

在这里插入图片描述


二、读取压缩后的二维码数据

1.识别二维码图片并读取数据

第一步:使用python的pyzbar库即可实现二维码的识别,如果发现pyzbar识别不了那就需要使用opencv相关库对图片进行处理,提高识别的准确性,这里就不展开研究opencv处理图像的内容了。

代码如下:

# 读取图片对象
    _image = cv2.imread(_file_path)
    # 使用pyzbar解析二维码中的数据
    _qr_data = pyzbar.decode(_image)

2.使用base64对读取的数据进行解码

第二步:在第一章中,我们使用了base64对压缩的数据进行了编码,因此在读取压缩数据时,需要使用base64进行解码。

代码如下:

# 识别二维码并解压缩
    return_data = read_compress_qrcode("compress_qrcode.png")
    base64_data = return_data[0].data.decode("utf-8")
    print("读取并解码后的base64编码为:%s" % base64_data)
    # 解码base64数据
    bytes_data = base64.b64decode(base64_data)

程序运行结果如下图。可见,前后数据是一致的。

在这里插入图片描述

3.解压解码后数据

第三步:使用zlib.decompress()进行解压。

代码如下:

# 解压数据
    unzip_bytes_data= zlib.decompress(bytes_data)

4.还原文件数据

第四步:最后使用二进制写方式(wb)打开文件,把数据写入后,另存为.txt结尾的文件,并保存。

代码如下:

# 还原压缩文件,使用二进制方式写入文件
    with open("还原后的文件.txt", 'wb') as f:
        f.write(unzip_bytes_data)
        f.close()

程序运行后生成的文件如下图:
在这里插入图片描述
可见,还原后文件的数据和压缩前是一致的。

在这里插入图片描述


三、完整源代码

1.完整的Python源代码

以下是完整的python代码,后续继续优化改进。

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


def compress_qrcode(_file_path):
    """
    把二进制文件压缩进二维码的函数
    :param _file_path: 待压缩进二维码的文件路径
    :return: 无
    """
    # 使用二进制模式读取以_file_path为路径的文件
    _file = open(_file_path, mode="rb")
    _contents = _file.read()
    # 对数据进行压缩
    _contents_zip = zlib.compress(_contents, zlib.Z_BEST_COMPRESSION)
    # 转换为_base64格式方便数据传输
    _contents_base64 = base64.b64encode(_contents_zip)
    _temp_str_utf8 = _contents_base64.decode('utf-8')
    print("压缩进二维码的base64编码为:%s" % _temp_str_utf8)
    # 创建QRCode对象
    _qr = qrcode.QRCode()
    # 向二维码添加数据
    _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解析二维码中的数据
    _qr_data = pyzbar.decode(_image)
    # 返回读取的数据
    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数据
    bytes_data = base64.b64decode(base64_data)
    # 解压数据
    unzip_bytes_data= zlib.decompress(bytes_data)
    # 还原压缩文件,使用二进制方式写入文件
    with open("还原后的文件.txt", 'wb') as f:
        f.write(unzip_bytes_data)
        f.close()

2.完整的Python源代码下载地址

下载地址:
二维码数据压缩源码|https://download.csdn.net/download/qq616491978/87450899


  • 51
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 33
    评论
### 回答1: 二维码数据集是指一组包含了二维码图像和对应标签的数据集。在Python中,我们可以使用各种方法和库来创建、读取和操作二维码数据集。 首先,我们可以使用Python中的qrcode库来创建二维码图像。该库提供了简单易用的方法,如`qrcode.make(data)`,其中`data`是二维码所包含的数据,可以是文本、链接等。我们可以通过遍历标签,将对应的数据生成二维码图像,然后保存到指定的文件夹中。 接下来,为了方便读取和处理二维码数据集,我们可以使用Python中的PIL库来加载和处理图像。通过`Image.open(filename)`方法可以加载图像文件,然后可以使用`image.convert('L')`将彩色图像转换为灰度图像,这样有助于提高图像的处理速度和准确性。 对于数据集的操作,我们可以使用Python中的Pandas库来进行数据处理和分析。可以将二维码图像的像素值转换为特征向量,并将对应的标签存储为数组。然后,可以利用Pandas提供的功能,例如数据过滤、排序、分组等来处理和分析数据集。 另外,在使用二维码数据进行机器学习任务时,我们可以使用Python中的Scikit-learn库来构建和训练模型。首先,可以将数据集分为训练集和测试集,然后选择合适的分类算法来训练模型。接着,可以使用测试集来评估模型的性能,并根据评估结果进行调整和优化。 总之,二维码数据集在Python中的应用非常广泛。通过使用适当的库和方法,我们可以轻松地创建、读取和处理二维码数据集,并应用于机器学习和其他领域的任务中。 ### 回答2: 二维码数据Python是指在Python编程语言中使用的包含多个二维码数据集。二维码是一种能够存储大量信息的方形图像,可通过扫描设备进行解码。在处理二维码数据集时,Python提供了一些工具和库,可以对二维码进行生成、解码和分析。 首先,我们可以使用Python中的qrcode库来生成二维码。该库允许我们将字符串、URL或其他数据转换为二维码图像。通过设置不同的参数,如背景颜色、前景颜色和像素大小,我们可以自定义生成的二维码。 其次,Python中的zxing库可以用于解码二维码图像。该库提供了接口,可以读取二维码图像,并将其转换为字符串或其他可供进一步处理的数据类型。我们可以使用该库来解码从摄像头、图像文件或屏幕截图中获取的二维码。 此外,Python中还有其他一些与二维码相关的库,如pyzbar和opencv-python。这些库提供了更丰富的功能,例如识别和解析多个二维码、定位二维码位置以及处理二维码图像的旋转和模糊等问题。 对于二维码数据集的分析,我们可以使用Python数据分析和可视化库,如Pandas和Matplotlib。这些库可以帮助我们对二维码数据进行统计分析、可视化和挖掘。通过这些分析,我们可以了解二维码使用情况、扫描次数、使用时间分布等信息,从而优化二维码的设计和使用策略。 总之,二维码数据Python提供了丰富的工具和库,可以方便地生成、解码和分析二维码。这些工具可以帮助我们更好地理解二维码的特性和应用,为二维码的设计和优化提供支持。 ### 回答3: 二维码数据集是指用于训练和测试二维码识别算法的数据集。Python是一种广泛应用于数据处理和机器学习领域的编程语言。在Python中,可以使用各种库和工具来处理和分析二维码数据集。 首先,我们需要下载或生成包含二维码图像和对应标签的数据集。可以使用Python中的qrcode库生成一批二维码图像,并将它们保存到文件中。同时,可以使用一个列表来存储每个二维码图像的标签,例如二维码所代表的信息或相应的类别。 接下来,我们可以使用Python中的图像处理库(如PIL或OpenCV)加载二维码图像,并将其转换为适合机器学习算法读取的数据格式。一种常见的处理方法是将图像转换为灰度图像,然后将像素值归一化到0到1之间。 在建立二维码数据集时,可以使用训练集和测试集的划分,以便在训练模型和评估其性能时使用不同的数据。可以使用Python中的Scikit-learn库中的train_test_split函数来随机划分数据集。 在对数据进行训练和测试之前,还可以使用Python中的一些数据预处理技术来增强数据,例如旋转、缩放、平移或添加噪声等。这些技术可以通过使用图像处理库或相关的深度学习框架(如TensorFlow或PyTorch)来实现。 最后,我们可以使用Python中的各种机器学习算法(如支持向量机、决策树、深度学习等)对二维码数据进行训练和测试。可以使用已有的机器学习库(如Scikit-learn、TensorFlow或PyTorch)来构建和训练模型,并使用测试数据集评估模型的性能。 综上所述,通过使用Python和相关的库和工具,我们可以很方便地处理和分析二维码数据集,并构建和训练二维码识别模型。
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇的代码在哪里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值