自动为摄影作品添加水印、缩放尺寸、压缩输出,并从 EXIF 中提取拍摄参数写入 photo.toml。
项目根目录/
├── run.py # 入口(python run.py)
├── src/ # 源代码
│ ├── main.py # 调度逻辑
│ ├── exif_utils.py # EXIF 提取
│ ├── toml_utils.py # TOML 读写
│ ├── watermark.py # 水印与处理
│ └── oss_utils.py # OSS 上传
├── scripts/ # 辅助脚本
│ └── download_font.py # 字体下载
├── fonts/ # 字体目录(自动下载)
│ └── NotoSans-Bold.ttf
├── original_photos/ # 原始照片(放这里)
├── output_photos/ # 处理后照片(自动生成)
├── photo.toml # 照片元数据(自动补全)
├── oss_config.example.json # OSS 凭证模板
├── .gitignore
└── README.md
- 安装 Python 3.x
- 安装依赖并下载字体:
pip install Pillow oss2
python scripts/download_font.py- (可选)配置阿里云 OSS 环境变量,用于自动同步图片到云端(详见下方)
- 将需要处理的
.jpg/.jpeg照片放入original_photos/文件夹
python run.py如需将处理后的图片自动上传到阿里云 OSS,按以下步骤操作:
- 进入 RAM 访问控制 → 创建用户
- 勾选「OpenAPI 调用访问」,创建后会得到 AccessKey ID 和 AccessKey Secret(Secret 只显示一次,立即保存)
- 为该用户添加权限:
AliyunOSSFullAccess
在 Bucket 的「数据安全」→「跨域设置」中添加规则:
- 来源:
* - Methods:
GET - Headers:
*
复制模板文件并填入你的信息:
copy oss_config.example.json oss_config.json编辑 oss_config.json:
{
"access_key_id": "你的AccessKey ID",
"access_key_secret": "你的AccessKey Secret",
"endpoint": "https://oss-cn-hangzhou.aliyuncs.com",
"bucket_name": "my-photos"
}Endpoint 根据 Bucket 所在地域填写,如
oss-cn-shanghai、oss-cn-beijing等。oss_config.json已加入.gitignore,不会被上传到 GitHub。
配置后,每次运行 python run.py 会自动将本次处理过的图片上传到 OSS(覆盖同名文件),上传路径为 images/photos/<文件名>,未变化的图片自动跳过。
- 缩放:长边缩放至 1920px
- 水印:
Guanqr Photography @ 年份底部居中- 年份自动从 EXIF
DateTimeOriginal读取 - 颜色根据底部区域明暗自动选择黑白
- 年份自动从 EXIF
- 压缩:JPEG 质量循环递减,控制在 400KB 以内
每张新增照片会自动追加到 photo.toml,EXIF 拍摄参数自动填入,手动字段留空,按拍摄时间升序排列。已有条目的手动编辑内容不会被覆盖。
| 字段 | 来源 |
|---|---|
| focus / iso / aperture / shutter / time | EXIF 自动提取 |
| alt / category / place / location / description | 留空,手动填写 |
只处理新增或发生变化的照片,未变化的自动跳过,避免重复工作。OSS 同步同样增量:只上传本次实际处理过的照片(覆盖云端同名文件),其余跳过。