JFIF格式的Jpeg属性读取, 读取了标准文件头, 其它内容结构需要逐项解析, 暂时没有做, 有感兴趣的朋友可以继续完善.
代码中的基础函数在下边链接的博文中获取
procedure TJFIF.ReadAPPn;
var
wrd, wrd2 : word;
str : string;
begin
wrd := GetWord;
while (wrd >= $FFE1) and (wrd <= $FFEF) do
begin
wrd2 := GetWord - 2;
str := GetString(wrd2);
mmoJpegInfo.lines.Add('APPn: ' + str);
wrd := GetWord;
end;
end;
procedure TJFIF.ReadJFIFInfo;
var
wrdImage : word; //word read from image file
dwdImage : dword; //double word read from image file
bytImage : byte; //byte read from image file
strImage : string; //string read from image file
iSize : integer;
begin
{read exif data size}
i64RefPos := fsImage.Position;
wrdImage := GetWord;
iSize := wrdImage;
mmoJpegInfo.lines.Add('JFIF Data Size=' + Inttostr(wrdImage));
{read actual exif header}
strImage := GetString(4);
if strImage <> 'JFIF' then
exit
else
mmoJpegInfo.lines.Add('Header: ' + strImage);
//read a null bytes after JfIF header
GetByte;
//Get version
mmoJpegInfo.lines.Add('version:' + IntToStr(GetByte) + '.' + IntToStr(GetByte));
//Get Units
bytImage := GetByte;
case bytImage of
0 : mmoJpegInfo.lines.Add('Units : none');
1 : mmoJpegInfo.lines.Add('Units : inch(DPI)');
2 : mmoJpegInfo.lines.Add('Units : CM(DPC)');
end;
//Xdensity
mmoJpegInfo.lines.Add('Xdensity:' + IntToStr(GetWord));
//Ydensity
mmoJpegInfo.lines.Add('Ydensity:' + IntToStr(GetWord));
//Xthumbnail
mmoJpegInfo.lines.Add('Xthumbnail:' + IntToStr(GetByte));
//Ythumbnail
mmoJpegInfo.lines.Add('Ythumbnail:' + IntToStr(GetByte));
fsImage.Position := i64RefPos + iSize;
ReadAPPn;
end; {read information from the jpeg file}
代码中的基础函数在下边链接的博文中获取