有不少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的時間信息源碼