图片的拍摄时间能改吗?怎么修改不被人发现?

图片的拍摄时间能改吗?怎么修改不被人发现?

import os

import argparse

from datetime import datetime

from PIL import Image, ExifTags

from PIL.PngImagePlugin import PngInfo

def modify_jpeg_datetime(image_path, new_datetime):

"""修改 JPEG 图片的拍摄时间"""

try:

with Image.open(image_path) as img:

# 获取 EXIF 数据

exif_data = img._getexif()

if exif_data is None:

exif_data = {}

# 将字典键从数值转换为字符串标签

exif = {ExifTags.TAGS[k]: v for k, v in exif_data.items() if k in ExifTags.TAGS}

# 设置拍摄时间

datetime_str = new_datetime.strftime("%Y:%m:%d %H:%M:%S")

exif['DateTimeOriginal'] = datetime_str

exif['DateTimeDigitized'] = datetime_str

# 创建新的 EXIF 数据

exif_bytes = img.getexif()

for tag, value in exif.items():

if tag in ExifTags.TAGS:

tag_id = list(ExifTags.TAGS.keys())[list(ExifTags.TAGS.values()).index(tag)]

exif_bytes[tag_id] = value

# 保存修改后的图片

img.save(image_path, exif=exif_bytes)

print(f"成功修改 JPEG 图片 {image_path} 的拍摄时间为 {datetime_str}")

except Exception as e:

print(f"修改 JPEG 图片失败: {e}")

def modify_png_datetime(image_path, new_datetime):

"""修改 PNG 图片的元数据时间"""

try:

datetime_str = new_datetime.strftime("%Y-%m-%d %H:%M:%S")

# 修改文件的创建时间和修改时间

timestamp = new_datetime.timestamp()

os.utime(image_path, (timestamp, timestamp))

# 尝试修改 PNG 的元数据(如果支持)

try:

with Image.open(image_path) as img:

metadata = PngInfo()

metadata.add_text("Creation Time", datetime_str)

img.save(image_path, pnginfo=metadata)

except:

# 如果无法修改元数据,只修改文件系统时间

pass

print(f"成功修改 PNG 图片 {image_path} 的时间为 {datetime_str}")

except Exception as e:

print(f"修改 PNG 图片失败: {e}")

def main():

parser = argparse.ArgumentParser(description='修改图片的拍摄时间')

parser.add_argument('image_path', help='图片文件路径')

parser.add_argument('datetime', help='新的拍摄时间,格式: YYYY-MM-DD HH:MM:SS')

args = parser.parse_args()

try:

# 解析日期时间

new_datetime = datetime.strptime(args.datetime, "%Y-%m-%d %H:%M:%S")

# 检查文件是否存在

if not os.path.exists(args.image_path):

print(f"错误: 文件 {args.image_path} 不存在")

return

# 获取文件扩展名并转换为小写

file_ext = os.path.splitext(args.image_path)[1].lower()

# 根据文件类型调用相应的处理函数

if file_ext == '.jpg' or file_ext == '.jpeg':

modify_jpeg_datetime(args.image_path, new_datetime)

elif file_ext == '.png':

modify_png_datetime(args.image_path, new_datetime)

else:

print(f"错误: 不支持的文件类型 {file_ext},仅支持 JPG、JPEG 和 PNG")

except ValueError as e:

print(f"日期时间格式错误: {e},请使用 YYYY-MM-DD HH:MM:SS 格式")

except Exception as e:

print(f"发生未知错误: {e}")

if __name__ == "__main__":

main()

相关推荐

The Innovation
365bet备用器下载

The Innovation

📅 07-09 👁️ 3074
Calibre:电子书管理的瑞士军刀
365bet体育在线备用

Calibre:电子书管理的瑞士军刀

📅 07-01 👁️ 9631
86cm 的腰围相当于几尺?
365bet备用器下载

86cm 的腰围相当于几尺?

📅 07-12 👁️ 1672