建设银行江苏官网招聘网站,金山区网站制作,网站开发哪些公司,怎么修改网站首页html代码当前二维码的应用越来越广泛#xff0c;包括疫情时期的健康码也是应用二维码的典型案例#xff0c;最近需要通过一张二维码显示较多文本数据#xff0c;也就是对二维码数据进行压缩#xff0c;使用CSDN搜索了半天居然没有能简单使用的代码#xff0c;很多事例代码解决不了… 当前二维码的应用越来越广泛包括疫情时期的健康码也是应用二维码的典型案例最近需要通过一张二维码显示较多文本数据也就是对二维码数据进行压缩使用CSDN搜索了半天居然没有能简单使用的代码很多事例代码解决不了字符编码、中文乱码等常见问题。因此只能自己研究了。 本文的目标很明确就是使用python实现一张二维码显示更多信息代码简单实用不乱码支持中文copy就能运行支持txt、doc、wps、docx、xls、xlsx、pdf、gif、jpg、png、mp4、avi、mp3等所有文件格式压缩、生成、读取二维码一个py文件实现。 以下是程序的代码文件结构尽量简单易用。 二维码数据压缩实践 | 使用python对二维码数据进行压缩一、二维码数据的压缩和写入1.读取二进制文件数据2.压缩二进制文件数据3.使用base64对压缩后的二进制文件数据进行编码4.将编码后的数据写入二维码二、读取压缩后的二维码数据1.识别二维码图片并读取数据2.使用base64对读取的数据进行解码3.解压解码后数据4.还原文件数据三、完整源代码1.完整的Python源代码2.完整的Python源代码下载地址一、二维码数据的压缩和写入
1.读取二进制文件数据
使用二进制文件避免了由于字符编码导致的各种问题很多博客中的事例代码对中文支持很不友好导致经常出现乱码、截断等问题所以文本的数据源使用二进制代码尽量避开文字编码问题。下图是待压缩进二维码的一个txt文档当然还可以是pdf、word、excel等文件。 代码如下
# 使用二进制模式读取以_file_path为路径的文件_file open(_file_path, moderb)_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.将编码后的数据写入二维码
创建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对读取的数据进行解码
# 识别二维码并解压缩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打开文件把数据重新写入并保存。
# 还原压缩文件使用二进制方式写入文件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 pyzbardef compress_qrcode(_file_path):把二进制文件压缩进二维码的函数:param _file_path: 待压缩进二维码的文件路径:return: 无# 使用二进制模式读取以_file_path为路径的文件_file open(_file_path, moderb)_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_dataif __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