logo
0
0
Login

SCF Image2WebP 图片转换服务

一个基于腾讯云 SCF(Serverless Cloud Function)的自动化图片转换服务,当图片上传到指定的 COS 存储桶时,自动触发云函数将图片转换为 WebP 格式并保存到目标存储桶。

🚀 功能特性

  • 自动触发: 当图片上传到源存储桶时自动触发转换
  • 格式支持: 支持 JPG、JPEG、PNG、BMP、TIFF 等常见图片格式
  • WebP 转换: 高效转换为 WebP 格式,减少文件大小
  • 质量控制: 可配置 WebP 压缩质量(默认 85%)
  • 错误处理: 完善的错误处理和日志记录
  • 批量处理: 支持批量文件处理
  • 透明度处理: 自动处理 RGBA/透明图片转换

📁 项目结构

scf-image2webp/ ├── README.md # 项目说明文档 ├── serverless.yml # Serverless Framework 配置 ├── requirements.txt # Python 依赖包 ├── .gitignore # Git 忽略文件 └── src/ # 源代码目录 ├── index.py # 主处理函数 └── [依赖包...] # 打包的 Python 依赖

🛠️ 技术栈

  • 运行时: Python 3.10
  • 框架: Serverless Framework
  • 云服务: 腾讯云 SCF + COS
  • 图片处理: Pillow (PIL)
  • COS SDK: cos-python-sdk-v5

📋 依赖包

cos-python-sdk-v5==1.9.38 # 腾讯云 COS Python SDK Pillow==10.4.0 # 图片处理库 requests>=2.8 # HTTP 请求库 six # Python 2/3 兼容库 xmltodict # XML 解析库 crcmod # CRC 校验库 pycryptodome # 加密库

⚙️ 环境配置

必需的环境变量

在云函数配置中设置以下环境变量:

SECRET_ID=your_secret_id # 腾讯云 SecretId SECRET_KEY=your_secret_key # 腾讯云 SecretKey REGION=ap-guangzhou # COS 地域(默认:ap-guangzhou) APPID=your_appid # 腾讯云 APPID RESIZED_BUCKET=target-bucket # 目标存储桶名称(不含 APPID)

云函数配置

# serverless.yml 配置说明 component: scf name: scf-image2webp inputs: name: image2webp # 函数名称 src: src: ./src # 源代码目录 handler: index.main_handler # 入口函数 runtime: Python3.10 # 运行时版本 namespace: default # 命名空间 region: ap-guangzhou # 部署地域 memorySize: 128 # 内存大小 (MB) timeout: 15 # 超时时间 (秒) triggers: # 触发器配置 - type: cos # COS 触发器 enable: true events: 'cos:ObjectCreated:*' # 对象创建事件

🚀 部署指南

1. 环境准备

# 安装 Serverless Framework npm install -g serverless # 安装腾讯云组件 npm install -g @serverless/tencent-scf

2. 配置凭证

# 方式一:使用 serverless 配置 serverless config credentials --provider tencent --key <SecretId> --secret <SecretKey> # 方式二:设置环境变量 export TENCENT_SECRET_ID=<SecretId> export TENCENT_SECRET_KEY=<SecretKey>

3. 部署函数

# 进入项目目录 cd scf-image2webp # 部署到云端 serverless deploy

4. 配置 COS 触发器

部署完成后,需要在腾讯云控制台配置 COS 触发器:

  1. 进入 SCF 控制台,找到部署的函数
  2. 添加 COS 触发器
  3. 选择源存储桶
  4. 配置触发事件:cos:ObjectCreated:*
  5. 设置文件前缀/后缀过滤(可选)

📝 使用说明

工作流程

  1. 图片上传: 用户将图片上传到配置的源 COS 存储桶
  2. 自动触发: COS 事件自动触发云函数执行
  3. 下载处理: 函数下载原始图片到临时目录
  4. 格式转换: 使用 Pillow 将图片转换为 WebP 格式
  5. 上传保存: 将转换后的 WebP 图片上传到目标存储桶
  6. 清理资源: 清理临时文件,释放内存

支持的图片格式

  • 输入格式: JPG, JPEG, PNG, BMP, TIFF, TIF
  • 输出格式: WebP

转换特性

  • 质量控制: 默认 WebP 质量为 85%
  • 透明度处理: RGBA/LA/P 模式图片自动转换为 RGB(白色背景)
  • 优化压缩: 启用 WebP 优化压缩
  • 文件命名: 保持原文件名,仅更改扩展名为 .webp

🔧 本地开发

环境设置

# 创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac # 或 venv\Scripts\activate # Windows # 安装依赖 pip install -r requirements.txt

📊 监控和日志

日志查看

  • 云函数控制台: 查看函数执行日志
  • CLS 日志服务: 配置日志投递到 CLS
  • 本地调试: 使用 logging 模块输出详细日志

关键指标

  • 转换成功率: 成功转换的图片数量/总处理数量
  • 转换时间: 单张图片的处理耗时
  • 文件大小: 转换前后的文件大小对比
  • 错误率: 处理失败的请求比例

🔍 故障排查

常见问题

  1. 权限错误

    • 检查 SecretId/SecretKey 是否正确
    • 确认账号有 COS 读写权限
  2. 触发器不生效

    • 检查 COS 触发器配置
    • 确认事件类型设置正确
  3. 转换失败

    • 检查图片格式是否支持
    • 确认图片文件完整性
  4. 内存不足

    • 增加云函数内存配置
    • 优化图片处理逻辑

错误代码

  • 500: 环境变量配置错误
  • COS Error: COS 服务相关错误
  • PIL Error: 图片处理错误

🔒 安全注意事项

  • 凭证管理: 使用环境变量存储敏感信息
  • 权限最小化: 仅授予必要的 COS 权限
  • 网络安全: 配置 VPC 网络(如需要)
  • 日志脱敏: 避免在日志中输出敏感信息

📈 性能优化

建议配置

  • 内存: 128MB(小图片)- 512MB(大图片)
  • 超时: 3-30 秒(根据图片大小调整)
  • 并发: 根据业务需求配置预置并发

优化策略

  • 批量处理: 单次处理多个文件
  • 异步处理: 使用消息队列处理大量文件
  • 缓存策略: 避免重复转换相同文件
  • 压缩优化: 根据用途调整 WebP 质量参数

🤝 贡献指南

  1. Fork 项目
  2. 创建功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📄 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

注意: 使用本服务前请确保已了解腾讯云 SCF 和 COS 的计费规则。

About

使用云函数触发 COS 存储桶上传图片的时候自动转为 webp

7.09 MiB
0 forks0 stars1 branches0 TagREADMEMIT license
Language
Python99.9%
JavaScript0.1%