python修改图片exif信息
最近沉迷将图片转移到谷歌照片上,但是遇到有些古老图片存在QQ空间,下载之后的图片没有日期信息,上传谷歌会直接显示日期是今日,所以比较苦恼……
于是寻找方法,修改图片的日期属性。
首先要知道EXIF这个东西,有条件可以看维基百科。
因此,我们终于知道了前进的方向。
具体实现
下面来说具体实现方法。本来想着用Python、java各做一遍,哪知道Python的运行速度超级快,究其原因是经过QQ空间上传过的图片下载下来已经超级小了所以处理比较快。
环境说明
Ubuntu 18.04
Python3.*
下载依赖包
使用piexif包
pip3 install piexif
代码实现与说明
from PIL import Image
import piexif
import os
def address():
"""
遍历目标文件夹所有文件名
"""
list = os.listdir(inPwd)
return list
def getInfo():
"""
获取一个图片将其Exif信息输出
函数内的imgPwd为一种图片的绝对路径,因为测试,若要使用,需查看上下逻辑,重写
"""
exif_dict = piexif.load(imgPwd)
for ifd in ("Exif", ):
for tag in exif_dict[ifd]:
print(piexif.TAGS[ifd][tag]["name"], exif_dict[ifd][tag])
def changeDate(imgName):
"""
修改一张图片的Exif值,前提是能够获取这个值
"""
imagePwd = inPwd + imgName
im = Image.open(imagePwd)
exif_dict = piexif.load(im.info["exif"])
exif_dict = {}
exif_dict["Exif"][piexif.ExifIFD.DateTime] = takeTime
exif_dict["Exif"][piexif.ExifIFD.DateTimeOriginal] = takeTime
exif_dict["Exif"][piexif.ExifIFD.DateTimeDigitized] = takeTime
exif_bytes = piexif.dump(exif_dict)
piexif.insert(exif_bytes, imagePwd)
def setDate(imgName):
"""
对于一张信息为空的图片,填充Exif数据
"""
imagePwd = inPwd + imgName
exif_ifd = {
piexif.ExifIFD.DateTimeOriginal: imgTime,
piexif.ExifIFD.DateTimeDigitized: imgTime,
}
exif_dict = {"Exif": exif_ifd}
exif_bytes = piexif.dump(exif_dict)
im = Image.open(imagePwd)
im.save(outPwd + imgName, exif=exif_bytes)
if __name__ == '__main__':
"""
inPwd 图片所在文件夹
outPwd 图片输出文件夹
imgTime 修改的图片时间
imgName 图片名称
imagePwd 图片绝对路径
"""
inPwd = "/home/ss/Pictures/ds/"
outPwd = "/home/ss/Pictures/da/"
imgTime = "2013:12:19 10:10:10"
list = address()
for x in list:
setDate(x)
后续逼话
一开始打算使用** changeDate ,发现这个方法只适用于原图片有相关数据的情况下修改,而不是用于没有相关属性的情况下修改,因此有了 setDate**