如何在python中更改图像捕获日期?

Gau*_*are 8 python image image-processing

由于错误的相机日期设置,我有超过500张图像(png/jpg)有错误的拍摄日期(拍摄日期).我将照片移动到手机和移动画廊,根据"拍摄日期"对照片进行排序.我希望所有照片都按顺序显示.

那么如何使用python脚本更改捕获日期(使用日期)?

Mar*_*ell 9

没有真正需要编写Python,你可以在终端使用中的一行中完成jhead.例如,将所有EXIF时间向前调整1小时

jhead -ta+1:00 *.jpg
Run Code Online (Sandbox Code Playgroud)

做一个COPY你的文件,并对它进行测试后第一个!

这里下载.

  • 这是一个如何在Python中执行此操作的问题. (10认同)
  • @PeterWood是的,我知道.OP可能认为需要一些冗长的脚本,并且可能只知道Python,因此已经标记了它.我只是指出一个更简单的解决方案 - 如果OP希望忽略它,他会受到欢迎......否则他可以花3天时间编写Python并说*"如果只有人提到我可以在5秒内完成它一个衬里"*.只是想帮忙. (5认同)
  • 除了我要搜索“ python add date take exif”外,这是最重要的结果之一,对我完全没有帮助 (4认同)

Wil*_*uza 6

I might be late to this party, but i wrote a python script for bulk changing taken time field for whatsapp photos based on filename format Eg: IMG-20160117-WA0001.jpg. Also this does not overwrite the existing properties. https://github.com/dsouzawilbur/Scripts/blob/master/Change_Photo_Taken_Time.py

from datetime import datetime
import os
import re
import piexif

def absoluteFilePaths(directory):
    for dirpath,_,filenames in os.walk(directory):
        for f in filenames:
            fullPath = os.path.abspath(os.path.join(dirpath, f))
            if re.match(r"^IMG-\d\d\d\d\d\d\d\d-WA\d\d\d\d.*", f) and not re.match(r"^IMG-\d\d\d\d\d\d\d\d-WA\d\d\d\d-ANIMATION.gif", f):
                print(f+" Matched")
                match = re.search("^IMG-(\d\d\d\d)(\d\d)(\d\d)-WA\d\d\d\d.*", f)
                year = match.group(1)
                month= match.group(2)
                day = match.group(3)
                exif_dict = piexif.load(fullPath)
                #Update DateTimeOriginal
                exif_dict['Exif'][piexif.ExifIFD.DateTimeOriginal] = datetime(int(year), int(month), int(day), 4, 0, 0).strftime("%Y:%m:%d %H:%M:%S")
                #Update DateTimeDigitized               
                exif_dict['Exif'][piexif.ExifIFD.DateTimeDigitized] = datetime(int(year), int(month), int(day), 4, 0, 0).strftime("%Y:%m:%d %H:%M:%S")
                #Update DateTime
                exif_dict['0th'][piexif.ImageIFD.DateTime] = datetime(int(year), int(month), int(day), 4, 0, 0).strftime("%Y:%m:%d %H:%M:%S")
                exif_bytes = piexif.dump(exif_dict)
                piexif.insert(exif_bytes, fullPath)
                print("############################")


absoluteFilePaths("__DIRECTORY_WITH_PHOTOS__")
Run Code Online (Sandbox Code Playgroud)


Joa*_*him 5

使用该piexif库很容易做到:

from datetime import datetime
import piexif

filename = 'image.jpg'
exif_dict = piexif.load(filename)
exif_dict['Exif'] = { piexif.ExifIFD.DateTimeOriginal: datetime(2018, 1, 1, 0, 0, 0).strftime("%Y:%m:%d %H:%M:%S") }
exif_bytes = piexif.dump(exif_dict)
piexif.insert(exif_bytes, filename)
Run Code Online (Sandbox Code Playgroud)

该脚本会将新日期2018:01:01 00:00:00插入的Date TakenEXIF字段值中image.jpg

  • piexif.insert() 添加第二个 EXIF 块(如果已经存在)。更好的方法是: exif_dict = piexif.load(filename); piexif.remove(文件名); ...; piexif.insert(exif_bytes,文件名)。Google Photos 总是读取第一个 EXIF 块,其他软件显示最后一个。JPEG 中最好只有一个 EXIF 块。 (3认同)