需要對照片文件的拍攝時間進行讀取,照片以".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;
}