在整理旧照片的时候,从一刻相册下载下来的照片时间信息不对,发现原照片没有EXIF日期信息,导致即便下载原始文件,也不会保留文件原始创建日期
问题分析
一刻相册中的图片,右侧显示时间为 2020年05月25日,实际下载时间却丢失而变为 当前下载时间
| 网盘图片 | 实际下载图片 |
|---|---|
![]() | ![]() |
可以发现这类文件的文件名 IMG20200525123827.jpg是明显包含时间戳的:2020-05-25 12:38,那就可以用脚本解决。问题是微信导出的 mmexport 开头的图片并没有肉眼可见的日期而是 13 位 Unix 毫秒时间戳
脚本说明
逻辑说明
优先级:文件名中明确的日期/时间格式>文件名中 13 位 Unix 毫秒时间戳>文件名末尾的导出时间戳
| 情况 | 处理逻辑 |
|---|---|
| exif有时间,文件名无时间 | 移入保留 文件夹,不做修改 |
| 文件名有时间 | 修改EXIF 信息后移入 修改 文件夹 |
| 都无时间 | 直接移入无时间 文件夹 |
文件名支持类型
首先明确目前已经支持的一些文件名
| 格式 | 示例 | 解析结果 |
|---|---|---|
Screenshot_YYYY-MM-DD-HH-MM-SS | Screenshot_2019-04-04-16-07-36-53.jpg | 2019-04-04 16:07:36 |
IMG_YYYYMMDD_HHMMSS | IMG_20180526_115312_1579248363749_80.jpg | 2018-05-26 11:53:12 |
任意位置连续 14 位YYYYMMDDHHMMSS | IMG20180807145631.jpg、faceu_0_20190218141843.jpg | 2019-02-18 14:18:43 |
mmexport<13位> | mmexport1533697685086.jpg | 2018-08-08 11:08:05 |
wx_camera_<13位> | wx_camera_1532072568536.jpg | 2018-07-20 15:42:48 |
microMsg.<13位> | microMsg.1530196473712.jpg | 2018-06-28 22:34:33 |
hdImg_...<13位> | hdImg_...1552658489533.jpg | 2019-03-15 22:01:29 |
qq_pic_merged_<13位> | qq_pic_merged_1556725293245.jpg | 2019-05-01 23:41:33 |
scan_filter_<13位> | scan_filter_1552792846706.jpg | 2019-03-17 11:20:46 |
mmqrcode<13位> | mmqrcode1553238340684.png | 2019-03-22 15:05:40 |
注意:文件名末尾的_<13位>_<索引>(如_1579248363749_80)是图片从 App 导出/备份的时间(约 2020-01-17),不是真实拍摄时间。只有当文件名中没有其它可识别时间时,才会用它兜底。
支持的扩展名
jpg、jpeg、png、heic、webp、gif
注意:.gif 按会直接删除,大部分为表情包,不需要可以修改源码。
使用说明
环境安装
- 确保
Python版本>3.10 安装依赖
python -m pip install pillow piexif
脚本使用
- 新建文件夹,所有图片至于文件夹内的顶层目录。
2.复制python脚本文件进入后,使用python *.py运行。
- 先跑
--dry-run预览,确认分类符合预期后再正式执行。 - 执行会把图片移动(
shutil.move)到保留/修改/无时间文件夹,原文件夹将不再保留这些图片。 process_images.py保留在目录中,可随时重新运行以处理新放入的图片。
脚本下载
此处内容需要评论回复后方可阅读
本文章采用 CC BY-NC-SA 4.0 协议授权,转载请注明来源。
文章名称:使用脚本一键修复图片EXIF日期信息
文章链接:https://blog.lhl.one/artical/1338.html

