exiv2 如何改變時間戳

有不少c/c++庫能夠實現jpeg的exif信息的讀取,好比libexif或者CxImage等。但若是咱們對jpeg進行有關處理後,想在寫入文件時保留原有的exif信息(好比拍攝時間等)就有點棘手了。c++

.net能夠支持exif的寫入,但始終不想處於微軟的淫威之下,因而幾番尋找後,找到了c++庫exiv2。git

這個庫提供有源碼和一個編譯好的命令行程序exiv2.exespa

先試着玩下exiv2.exe,發現有好多坑,通過兩個小時的戰鬥後終於能夠寫入時間了。.net

1、 用ad進行時間調整

若是一個jpg自己就有exif信息,那麼就能夠用ad來對時間進行調整。注意是調整,而不是設置。調整就是在現有的基礎上進行加減。命令行

# 這個命令是-Y表示調全年份,+5表示增長5年,ad 即adjust,表示調整
exiv2.exe -Y +5 ad j.jpg
  • -Y 年
  • -O 月
  • -D 日
  • -a 時間

這個命令有不少的限制,若是jpg自己沒有eixf信息,那麼則沒法運行,而且想要調整的時間還得用加減來計算,這種方式太醜陋。code

2、用 -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

上面這個命令本人嘗試了很久,終於正常運行了。blog

DateTime, DateTimeOrigianl, DateTimeDigitized得同時設置。ci

這個命令在自己沒有exif信息的jpeg上運行,也能夠覆蓋已有exif的時間信息源碼

3、其它的一些exiv2命令行參數

  • exiv2 -pt j.jpg  #打印出jpg文件中全部的exif信息
  • exiv2 rm j.jpg  #刪除jpg的全部eixf信息