使用flutter_image_compress压缩转Base64上传,Python端无法解压如何解决?
问题
我已成功通过以下两步将文件上传至S3:
- 使用flutter_image_compress进行压缩;
- 将文件转换为Base64格式。
目前能在Python中读取Base64字符串:
base64_string = open("img1b95b3ed9e494595b01610f06d9f074b.txt", "r").readlines()[0]
但后续解压操作失败:
msg = base64.b64decode(base64_string) inflated = zlib.decompress(msg) # 报错:zlib.error: Error -3 while decompressing data: incorrect header check
请问使用flutter_image_compress压缩后,在Python端的正确解码方法是什么?
附Flutter端压缩代码:
Future<Uint8List?> testCompressFile(File file) async { var result = await FlutterImageCompress.compressWithFile(file.absolute.path, quality: 100, keepExif: true ); return result; }
正确解码方法
你用flutter_image_compress的compressWithFile方法默认输出的是JPEG格式的二进制数据(不是zlib压缩的字节流),所以直接用zlib解压完全错误,根本不需要这一步。
Python端的正确处理步骤:
- 解码Base64字符串得到原始二进制数据;
- 将二进制数据直接保存为图片文件,或用图片处理库加载即可。
示例代码
保存为图片文件
import base64 # 注意去除字符串可能带有的换行符 base64_string = open("img1b95b3ed9e494595b01610f06d9f074b.txt", "r").readlines()[0].strip() img_bytes = base64.b64decode(base64_string) # 保存为JPEG图片 with open("compressed_image.jpg", "wb") as f: f.write(img_bytes)
使用PIL加载图片(可选)
import base64 from PIL import Image import io base64_string = open("img1b95b3ed9e494595b01610f06d9f074b.txt", "r").readlines()[0].strip() img_bytes = base64.b64decode(base64_string) # 用PIL打开并显示图片 img = Image.open(io.BytesIO(img_bytes)) img.show()
补充说明
如果你的Flutter代码指定了其他压缩格式(比如PNG),Python端只需要对应修改保存的文件后缀即可,核心逻辑不变——因为flutter_image_compress返回的是对应图片格式的二进制数据,不是通用的zlib压缩包。
内容的提问来源于stack exchange,提问作者Tampa
相关产品推荐
相关产品推荐

