You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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端的正确处理步骤:

  1. 解码Base64字符串得到原始二进制数据;
  2. 将二进制数据直接保存为图片文件,或用图片处理库加载即可。

示例代码

保存为图片文件

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:45:34