本文目录导读:

我来帮你创建一个批量修改照片拍摄日期的脚本,这里提供几种常用的方案:
使用 Python + Pillow(最常用)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量修改照片拍摄日期脚本
支持格式:JPEG, PNG, TIFF 等
"""
import os
import sys
from datetime import datetime
from PIL import Image
from PIL.ExifTags import TAGS
import shutil
def get_exif_date(img):
"""获取照片的拍摄日期"""
try:
exif = img._getexif()
if exif:
for tag_id, value in exif.items():
tag = TAGS.get(tag_id, tag_id)
if tag == "DateTimeOriginal":
return value
elif tag == "DateTimeDigitized":
return value
except:
pass
return None
def modify_exif_date(file_path, new_date, output_dir=None):
"""
修改照片拍摄日期
参数:
file_path: 照片路径
new_date: 新的日期时间(datetime对象)
output_dir: 输出目录(None则覆盖原文件)
"""
try:
# 打开图片
img = Image.open(file_path)
# 获取exif数据
if hasattr(img, '_getexif'):
exif_data = img._getexif()
else:
exif_data = {}
# 如果没有exif,创建新的
if not exif_data:
exif_data = {}
# 转换日期格式
date_str = new_date.strftime("%Y:%m:%d %H:%M:%S")
# 更新相关EXIF标签
# DateTimeOriginal - 拍摄时间
# DateTimeDigitized - 数字化时间
# DateTime - 修改时间
exif_data[36867] = date_str # DateTimeOriginal
exif_data[36868] = date_str # DateTimeDigitized
exif_data[306] = date_str # DateTime
# 保存修改后的exif
if output_dir:
os.makedirs(output_dir, exist_ok=True)
output_path = os.path.join(output_dir, os.path.basename(file_path))
else:
output_path = file_path
# 保存图片
img.save(output_path, exif=exif_data)
img.close()
print(f"✅ 已修改: {os.path.basename(file_path)}")
return True
except Exception as e:
print(f"❌ 修改失败 {os.path.basename(file_path)}: {str(e)}")
return False
def process_folder(input_folder, new_date, output_folder=None, extensions=None):
"""
批量处理文件夹中的照片
参数:
input_folder: 输入文件夹路径
new_date: 新的拍摄日期
output_folder: 输出文件夹(可选)
extensions: 允许多文件扩展名列表
"""
if extensions is None:
extensions = ['.jpg', '.jpeg', '.png', '.tiff', '.bmp']
# 转换为小写比较
extensions = [ext.lower() for ext in extensions]
# 获取所有图片文件
files = []
for file in os.listdir(input_folder):
file_ext = os.path.splitext(file)[1].lower()
if file_ext in extensions:
files.append(file)
if not files:
print("❌ 未找到支持的图片文件")
return
print(f"找到 {len(files)} 张图片")
success_count = 0
fail_count = 0
for file in files:
file_path = os.path.join(input_folder, file)
if modify_exif_date(file_path, new_date, output_folder):
success_count += 1
else:
fail_count += 1
print(f"\n📊 统计结果:")
print(f" 成功: {success_count} 张")
print(f" 失败: {fail_count} 张")
def main():
"""主函数 - 交互式界面"""
print("="*50)
print("📷 批量修改照片拍摄日期工具")
print("="*50)
# 输入文件夹路径
input_folder = input("请输入图片文件夹路径: ").strip()
# 检查文件夹是否存在
if not os.path.exists(input_folder):
print(f"❌ 文件夹不存在: {input_folder}")
return
# 输入新的日期
date_input = input("请输入新的拍摄日期 (格式: YYYY-MM-DD HH:MM:SS): ").strip()
try:
new_date = datetime.strptime(date_input, "%Y-%m-%d %H:%M:%S")
except ValueError:
print("❌ 日期格式错误,请使用 YYYY-MM-DD HH:MM:SS 格式")
return
# 是否备份
backup = input("是否备份原文件?(y/n): ").strip().lower()
output_folder = None
if backup == 'y':
output_folder = os.path.join(input_folder, "modified_" + datetime.now().strftime("%Y%m%d_%H%M%S"))
print(f"备份目录: {output_folder}")
# 执行批量修改
process_folder(input_folder, new_date, output_folder)
print("\n✨ 操作完成!")
if __name__ == "__main__":
main()
使用 exiftool(最专业)
如果你的系统安装了 exiftool,可以使用更专业的方案:
#!/bin/bash
# 批量修改照片日期 - exiftool 版本
# 使用方法:修改以下变量
PHOTO_DIR="/path/to/your/photos" # 图片文件夹路径
NEW_DATE="2024:01:01 12:00:00" # 新的日期时间
# 批量修改所有 JPG 文件
find "$PHOTO_DIR" -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) -exec exiftool -DateTimeOriginal="$NEW_DATE" -DateTimeDigitized="$NEW_DATE" -DateTime="$NEW_DATE" {} \;
命令行版本(带参数)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
命令行版本:批量修改照片拍摄日期
用法: python modify_date.py <文件夹路径> "2024-01-01 12:00:00"
"""
import sys
import os
from datetime import datetime
def modify_photo_date(file_path, new_date_str):
"""修改单张照片的日期"""
from PIL import Image
from PIL.ExifTags import TAGS
try:
# 解析日期
new_date = datetime.strptime(new_date_str, "%Y-%m-%d %H:%M:%S")
date_str = new_date.strftime("%Y:%m:%d %H:%M:%S")
# 打开并修改
img = Image.open(file_path)
exif_data = img._getexif() if hasattr(img, '_getexif') else {}
# 添加或修改EXIF日期标签
exif_data[36867] = date_str # DateTimeOriginal
exif_data[36868] = date_str # DateTimeDigitized
exif_data[306] = date_str # DateTime
# 保存
img.save(file_path, exif=exif_data)
img.close()
print(f"✅ {os.path.basename(file_path)} -> {new_date_str}")
return True
except Exception as e:
print(f"❌ {os.path.basename(file_path)}: {str(e)}")
return False
def main():
if len(sys.argv) != 3:
print("用法: python modify_date.py <文件夹路径> 'YYYY-MM-DD HH:MM:SS'")
sys.exit(1)
folder_path = sys.argv[1]
new_date_str = sys.argv[2]
# 验证日期格式
try:
datetime.strptime(new_date_str, "%Y-%m-%d %H:%M:%S")
except ValueError:
print("❌ 日期格式错误,请使用 YYYY-MM-DD HH:MM:SS 格式")
sys.exit(1)
# 支持的扩展名
extensions = ['.jpg', '.jpeg', '.png', '.tiff', '.bmp']
# 处理所有图片
count = 0
for file in os.listdir(folder_path):
if os.path.splitext(file)[1].lower() in extensions:
if modify_photo_date(os.path.join(folder_path, file), new_date_str):
count += 1
print(f"\n✨ 成功修改 {count} 张照片")
if __name__ == "__main__":
main()
使用说明
安装依赖
pip install Pillow
交互式使用
python modify_photos.py
命令行使用
python modify_date.py /path/to/photos "2024-01-01 12:00:00"
如果需要 exiftool
# Ubuntu/Debian sudo apt-get install exiftool # macOS brew install exiftool
注意事项
- 备份文件:脚本默认会直接修改原文件,建议先用副本测试
- EXIF 信息:部分相机形成的图片可能包含多个日期字段
- 文件权限:确保脚本有足够的文件读写权限
- 批量处理:建议先测试少量文件,确认效果后再批量处理
需要我帮你调整脚本功能吗?
- 添加日期偏移(批量加上/减去天数)
- 根据文件名解析日期
- 支持更多图片格式
- 添加 GUI 界面
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播