有不少c/c++库能够实现jpeg的exif信息的读取,好比libexif或者CxImage等。但若是咱们对jpeg进行有关处理后,想在写入文件时保留原有的exif信息(好比拍摄时间等)就有点棘手了。c++
.net能够支持exif的写入,但始终不想处于微软的淫威之下,因而几番寻找后,找到了c++库exiv2。git
这个库提供有源码和一个编译好的命令行程序exiv2.exespa
先试着玩下exiv2.exe,发现有好多坑,通过两个小时的战斗后终于能够写入时间了。.net
若是一个jpg自己就有exif信息,那么就能够用ad来对时间进行调整。注意是调整,而不是设置。调整就是在现有的基础上进行加减。命令行
# 这个命令是-Y表示调全年份,+5表示增长5年,ad 即adjust,表示调整
exiv2.exe -Y +5 ad j.jpg
这个命令有不少的限制,若是jpg自己没有eixf信息,那么则没法运行,而且想要调整的时间还得用加减来计算,这种方式太丑陋。code
exiv2 -M"set Exif.Image.DateTime Ascii 2005:01:25 15:45:00" -M"set Exif.Photo.DateTimeOriginal Ascii 2005:01:25 15:45:00" -M"set Exif.Photo.DateTimeDigitized Ascii 2005:01:25 15:45:00" j.jpg
上面这个命令本人尝试了很久,终于正常运行了。blog
DateTime, DateTimeOrigianl, DateTimeDigitized得同时设置。ci
这个命令在自己没有exif信息的jpeg上运行,也能够覆盖已有exif的时间信息源码