exiv2 如何改变时间戳

有很多c/c++库可以实现jpeg的exif信息的读取,比如libexif或者CxImage等。但如果我们对jpeg进行有关处理后,想在写入文件时保留原有的exif信息(比如拍摄时间等)就有点棘手了。

.net可以支持exif的写入,但始终不想处于微软的淫威之下,于是几番寻找后,找到了c++库exiv2。

这个库提供有源码和一个编译好的命令行程序exiv2.exe

先试着玩下exiv2.exe,发现有好多坑,经过两个小时的战斗后终于可以写入时间了。

一、 用ad进行时间调整

如果一个jpg本身就有exif信息,那么就可以用ad来对时间进行调整。注意是调整,而不是设置。调整就是在现有的基础上进行加减。

# 这个命令是-Y表示调整年份,+5表示增加5年,ad 即adjust,表示调整
exiv2.exe -Y +5 ad j.jpg
  • -Y 年
  • -O 月
  • -D 日
  • -a 时间

这个命令有很多的限制,如果jpg本身没有eixf信息,那么则无法运行,并且想要调整的时间还得用加减来计算,这种方式太丑陋。

二、用 -M set命令直接设置

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

上面这个命令本人尝试了好久,终于正常运行了。

DateTime, DateTimeOrigianl, DateTimeDigitized得同时设置。

这个命令在本身没有exif信息的jpeg上运行,也可以覆盖已有exif的时间信息

三、其它的一些exiv2命令行参数

  • exiv2 -pt j.jpg  #打印出jpg文件中所有的exif信息
  • exiv2 rm j.jpg  #删除jpg的所有eixf信息
原文地址:https://www.cnblogs.com/xiangism/p/4645832.html