• 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信息
  • 相关阅读:
    Java自学二十六天
    Java自学三十四天
    Java自学三十二天
    Java自学三十天
    Java开学考试心得
    Java自学二十九天
    Java自学二十八天
    Java自学三十一天
    Java自学三十三天
    2020年月12日Java学习日记
  • 原文地址:https://www.cnblogs.com/xiangism/p/4645832.html
Copyright © 2020-2023  润新知