python 压缩文本内容并生成二维码
单文本压缩并生成二维码
需求: 对文本内容进行压缩,并生成二维码,二维码中包含压缩后的文本内容。解码时,对二维码中的内容进行解压缩,还原文本内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| import zlib import base64 import qrcode from PIL import Image
def compress_text(): text = """ 这是一个需要压缩并生成二维码的文本内容。 """
compressed_data = zlib.compress(text.encode('utf-8'))
compressed_base64 = base64.b64encode(compressed_data).decode('utf-8')
qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, ''' error_correction: 容错率,支持 4 个级别: ERROR_CORRECT_L: 约 7% 的错误可以纠正。 ERROR_CORRECT_M: 约 15% 的错误可以纠正(默认)。 ERROR_CORRECT_Q: 约 25% 的错误可以纠正。 ERROR_CORRECT_H: 约 30% 的错误可以纠正。 ''' box_size=10, border=4, ) qr.add_data(compressed_base64) qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("compressed_qr.png")
img.show()
print("二维码已生成并保存为 compressed_qr.png")
def decompress_text(): scanned_base64 = "eJyNVMlO20AYvvsprPQQR6GmSClFSD6wqaJFMg1UUU/WxJk408R2MnYAcaOtSigQOFCWplWR2lKqAkUIsSVKXsZLeuIVOl6SQBapPo2/mf//vn+lkJxVsU4vZlCc8s9xoMHBSOMvh0U1AakkVmV6enKK9uFJGUiQoqgETNKiKmcx1DRBhws6ExqmaPI9oOsHS2Zx1a78sj+9s7aXrc9HlH/jwT7mQA0PMCEkgA5ozhXENmDGccxCxVHCBPN68uFQMBRqejt97zk0N4uEyrhZq9dKZuHC+nhqrZ/YlW17f8m4uqFH3bho83jHPjowrs5uKwVr+9qo1oiFXT4nr8zjXfPN4W1lpV2UlxIiyzuw8cGIr6ZNeYhNwHsqGyLtra9WYbPJ5KI5TDx6+WVfRMccMxd3vjmINaQq3EBfE4IYq1gQVYyhqDt3vqmoKpoOFF1jJ6JRPiqM8dHoxNisMNUyjasLgoYWITfw6C6IExBzEQ8J+ZJYkPBCYTriD/nZ7sikdVk2P+ybhdP2+FgZpCGTRDo3i/OwVbFCySzftNJeqppvN9w7JEtuTlxDATlNRswzGRJ2RsVcIJ4BYjrQR+ogphvYfArpMNB0btS+kDr2cM5qYA4ygTuhEa6sIrXMrd2q/b2XNlZLqfOM/zaLkaIzgdbTyzOvyub1hS+CdF1XKndsnE7pOjjm0nL9pFqv7Vm7f4xysUlgXB1bK7+tjQ2zukOSTXq9oxKuB00EinK3awPw2fzo9Mj4eH8Y9csQvMLhmYjEz0RyeVmUeBIYjPEoDIdyMPZYz8OXShhMpvmZwdc8fKLzUJIgBCkexFJhIGI+9jQFY/k85EckxMPnSpoLuPNe2/u7vGaXzq3iD3vr0LheNVfWvYx0ldpYEz+/kdg6rknu2ia5x6ZojaQ/evfD77k2CK+3NrrRqBhJSAEZtzKNddQq2H+Ovd8hTSZvQXl7b5h08T0Wpy1QkhYEBchQEGiOo4OCIAOkCELQa42OjvFo/gEUIGjR"
compressed_data = base64.b64decode(scanned_base64.encode('utf-8'))
original_text = zlib.decompress(compressed_data).decode('utf-8')
print("解压缩后的文本:", original_text)
if __name__ == '__main__': compress_text() decompress_text()
|
长文本分片压缩并生成二维码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| import zlib import base64 import qrcode from PIL import Image
def compress_text(): long_text = """ 这是一个需要压缩并生成二维码的长文本内容。 """
compressed_data = zlib.compress(long_text.encode('utf-8')) print("压缩后的二进制数据:", compressed_data) chunk_size = 2200 chunks = [compressed_data[i:i + chunk_size] for i in range(0, len(compressed_data), chunk_size)]
for i, chunk in enumerate(chunks): chunk_base64 = base64.b64encode(chunk).decode('utf-8') chunk_info = f"{i + 1}/{len(chunks)}:{chunk_base64}" qr = qrcode.QRCode( version=40, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(chunk_info) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") img.save(f"qr_chunk_{i + 1}.png") print(f"二维码块 {i + 1} 已保存为 qr_chunk_{i + 1}.png")
print("所有二维码已生成。")
def decompress_text(): scanned_base64_list = [ "1/2:eJzT0yMAAGTvBe8=", "2/2:eJzT0yMAAGTvBe9=", ]
scanned_base64_list.sort(key=lambda x: int(x.split(":")[0].split("/")[0]))
compressed_data = b'' for i, chunk in enumerate(scanned_base64_list): chunk_base64 = chunk.split(":")[1]
compressed_chunk = base64.b64decode(chunk_base64.encode('utf-8'))
compressed_data += compressed_chunk original_text = zlib.decompress(compressed_data).decode('utf-8') print("解压缩后的文本:", original_text)
with open("output_file.txt", "w", encoding='utf-8') as f: f.write(original_text)
if __name__ == '__main__': compress_text() decompress_text()
|