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
相关产品推荐
相关产品推荐

