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

Python上传图片至Google Cloud前的压缩实现方法咨询

前置说明

Base64是二进制转文本的编码规则,编码后体积会比原文件增加约33%,不具备压缩能力,因此之前的压缩尝试无法达到预期效果。

实现方案

我们使用Pillow库对JPG图片进行质量压缩,在几乎无肉眼感知画质损失的前提下缩小体积,再上传到Google Cloud Storage。

第一步:安装依赖

执行以下命令安装Pillow图像处理库:

pip install pillow

第二步:修改上传代码

新增图片压缩逻辑,可通过调整quality参数(取值范围1-100,数值越高画质越好、体积越大)控制压缩效果,常规场景设置为60-80即可满足需求:

from google.cloud import storage
from PIL import Image
import os

def compress_image(input_path, output_path, quality=70):
    """压缩JPG图片,调整输出质量"""
    with Image.open(input_path) as img:
        img.save(output_path, "JPEG", quality=quality, optimize=True)

def upload_to_bucket(blob_name, file_path, bucket_name, compress=True, quality=70):
    try:
        storage_client = storage.Client()
        bucket = storage_client.get_bucket(bucket_name)
        blob = bucket.blob(blob_name)

        if compress and file_path.lower().endswith(('.jpg', '.jpeg')):
            # 生成临时压缩文件路径
            temp_path = f"temp_compressed_{os.path.basename(file_path)}"
            compress_image(file_path, temp_path, quality)
            blob.upload_from_filename(temp_path)
            # 上传完成后删除临时文件
            os.remove(temp_path)
        else:
            blob.upload_from_filename(file_path)

        print("successfully uploaded {} to {}".format(file_path, bucket_name))
        return True
    except Exception as e:
      print(e)
      return False

# 调用示例,quality可根据需求自行调整
upload_to_bucket("QR2", 'QRcode_Scanner\whitecards\WC_QR_Scan.jpg', 'test_storage_whitecards', quality=70)

额外优化说明

  • 如果原图片尺寸过大,可在compress_image函数中增加img.resize((width, height))逻辑,同步缩小图片尺寸进一步降低体积
  • 针对PNG格式图片,可调整compress_image中的保存参数为png_compress_level(取值范围0-9)实现压缩

内容的提问来源于stack exchange,提问作者Kwinten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:27:08