有很多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信息

exiv2 如何改变时间戳的更多相关文章

  1. touch

    Linux touch 命令   在 Linux 下运用 touch 命令创建一个空文件.当然我们也可以使用其他命令例如 vi, nano 或是任意一个编辑工具来实现.但是你可能需要更多的步骤来完成操 ...

  2. 小白Linux入门 四

    http://edu.51cto.com/lesson/id-11372.html 28了 文件管理类命令 目录: mkdir mkdir /tmp/x mkdir -p /tmp/a/b -pv b ...

  3. Sublime Text 3 常用插件以及安装方法(vue 插件)

    使用Package Control组件安装 也可以安装package control组件,然后直接在线安装: 按Ctrl+` 调出console 粘贴以下代码到底部命令行并回车: { import u ...

  4. go文件操作大全

    参考Go官方库的文件操作分散在多个包中,比如os.ioutil包,我本来想写一篇总结性的Go文件操作的文章,却发现已经有人2015年已经写了一篇这样的文章,写的非常好,所以我翻译成了中文,强烈推荐你阅 ...

  5. Go文件操作

    UNIX 的一个基础设计就是"万物皆文件"(everything is a file).我们不必知道一个文件到底映射成什么,操作系统的设备驱动抽象成文件.操作系统为设备提供了文件格 ...

  6. perl基本语法

    标量 标量是 Perl 中最简单的数据类型.大多数的标量是数字(如 255 或 3.25e20)或者字符串(如 hello或者盖茨堡地址). 数字 perl中所有数字内部的格式都是双精度浮点数. 浮点 ...

  7. linux系统文件属性

    1  硬链接概念 硬链接是指通过索引节点(Inode)来进行链接,在Linux(ext2,ext3)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(I ...

  8. 为什么我们需要使用 touch 命令

    为什么我们需要使用 touch 命令 既然 touch 命令描述的是改变时间戳,那么我们可能会想为什么我们需要去改变时间戳呢?这个问题会引发我们的深思.然而,我想有个理由可以解释为什么我们需要使用它. ...

  9. sublime text3 插件配置

    (转) sublme text 全程指引:http://www.cnblogs.com/figure9/p/sublime-text-complete-guide.html 使用Package Con ...

随机推荐

  1. Java数组和C++异同

    一.定义和初始化 1.Jave定义和初始化: Java:两种方式 Type[]  A; Type A[]; 定义时不能指定数组的长度 静态初始化:   A = new Type[][Ele1,Ele2 ...

  2. 单例模式(Java)

    //单例模式 public class Singleton { private static Singleton s; private Singleton(){ } public static Sin ...

  3. 使用Github Pages建独立博客

    http://beiyuu.com/github-pages/ Github很好的将代码和社区联系在了一起,于是发生了很多有趣的事情,世界也因为他美好了一点点.Github作为现在最流行的代码仓库,已 ...

  4. xcode 第三方插件遇到问题

    xcode 第三方安装的路径 ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 

  5. Angularjs select的使用

    实例一:基本下拉效果 usage: label for value in array <!-- lang: html --> <select ng-model="selec ...

  6. appium+Python真机运行测试demo的方法

    appium+Python真机运行测试demo的方法 一,    打开手机的USB调试模式 二,    连接手机到电脑 将手机用数据线连接到电脑,并授权USB调试模式.查看连接的效果,在cmd下运行命 ...

  7. 移动销售端app的需求分析

    随着网络时代的发展,人们对于网络的依赖越来越大,网上购物便成了一个很大的消费者市场.. 如何分析一个综合的移动销售端app的需求我认为首先要确定用户,从用户的角度一个一个功能过,评估每一个功能的需求, ...

  8. 第七周——Linux内核如何装载和启动一个可执行程序

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 part1 实验 ...

  9. Ansible-Tower快速入门-5.导入许可【翻译】

    导入许可 Tower需要一个有效的许可才可以正常运行,当你输入你的相关信息得以下载tower时,你应该有接收到一封包含许可的email邮件,你也可以直接从ansible获取许可. 如果你不能获取许可或 ...

  10. iOS各版本图标尺寸汇总

    About Information Property List Files UILaunchImageFile UILaunchImageFile (String - iOS) specifies t ...