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