有很多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. iOS应用性能调优好文mark

    http://www.cocoachina.com/ios/20150408/11501.html

  2. Jquery和Javascript 实际项目中写法基础-弹出窗和弹出层 (4)

     一.实际项目中有很多如下界面效果.    二.该效果可以归结为弹出窗或者弹出层来实现的,为什么这么说?看如下代码:      <!DOCTYPE html> <html> & ...

  3. HttpModule的认识

    1.asp.net的HTTP请求处理过程 说明: (1).客户端浏览器向服务器发出一个http请求,此请求会被inetinfo.exe进程截获,然后转交给aspnet_isapi.dll进程,接着它又 ...

  4. Impossible to load an image in xcassets on bundle

    Impossible to load an image in xcassets on bundle up vote5down votefavorite 3 I need to include imag ...

  5. ReportViewer中修改rdlc图表中显示的数据

    将rdlc以xml的格式打开,修改里面的数据,实现方式如下: public MemoryStream GenerateRdlc()    { XmlDocument xmlDoc = new XmlD ...

  6. 《JavaScript_DOM编程艺术第二版(中文)》整书笔记

    目录 第3章:DOM 第4章:案例研究 第5章:最佳实践 第6章:案例改进 第7章:动态创建标记 第8章:充实文档的内容 第9章:CSS-DOM 第3章:DOM 文档:DOM中的"D&quo ...

  7. Largest Rectangle in Histogram

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  8. JAVA,NET RSA密钥格式转换

    JAVA和NET RSA密钥格式相互转换(公钥,私钥) 做了一个小项目遇到java和.net非对称加密问题,java的公钥和私钥就直接是一个字符串的形式展示的,但是.net是以xml简单包裹形式展示的 ...

  9. 【转】DBMS_STATS.GATHER_TABLE_STATS详解

    转自http://blog.itpub.net/26892340/viewspace-721935/ [作用] DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默 ...

  10. linux常用工具集合

    网络: nm-tool 查看网络状态(有线/无线)