C++ 阅读JPEG格式中的EXIF信息

      需要对照片文件的拍摄时间进行读取,照片以".jpg"格式存储。之前以为直接读取文件创建时间就可以了,但是遍历文件得到的文件信息结构体存储的是文件在本地的一些时间,其中的文件创建时间再复制,编辑等操作之后就会发生改变,并非该照片原本的拍摄时间。后来搜索到Exif,百科中说,Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,简而言之,Exif=JPEG+拍摄参数。

UltraEdit等二进制文件查看工具打开".jpg"格式的文件,可以发现在文件头有一部分存储了大量的非图像信息,这些其实是该图像的Exif字段,包括了拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。

网上有很多程序读取所有的拍摄参数,通过添加提供的.h.cpp文件就可以被自己所用。由于只需要读取拍摄时间信息,就使用简单的按字符读取信息的方法就好了。

#define  TIMELINE_BEGIN 13

#define  BASE 16

#define  MAX_STRLEN 100

string Get_ExifTime(string fileName)

{

    string ExifTime = "";

    fstream fin(fileName.c_str(), ifstream::in | ifstream::binary);

    if ( fin == NULL )

    {    

       cerr << "error in open the JPG FILE" << endl;

        exit(-1);

    }

    int offset = 0;

    char str[MAX_STRLEN];

    memset(str, 0sizeof(str));

    //根据文件数出来的offset    offset = TIMELINE_BEGIN * BASE + 4;

    fin.seekg(offset, ifstream::beg);

    fin.read(str, 19);

    ExifTime = str; 

    fin.close();

    return ExifTime;    

}

       本博客转载自网友  http://www.cnblogs.com/summerRQ/articles/2375780.html,写的不错,收藏了,另外需要说明一下,如何创建含有EXIF信息的JPEG文件,可以参考Android2.3 Camera 拍照相关代码,里面有硬件压缩图像数据形成JPEG文件(含有EXIF信息)的源代码。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值