C++ 閱讀JPEG格式中的EXIF資訊

來源:互聯網
上載者:User

      需要對照片檔案的拍攝時間進行讀取,照片以".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, 0, sizeof(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資訊)的原始碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.