不通过扩展名判断图像文件格式

来源:互联网 发布:潭州淘宝旗舰店靠谱吗 编辑:程序博客网 时间:2024/05/21 09:36

  编制一个小程序,需要判断图像文件格式。从网上搜索到,文件头第1个字节:1、$00 Icon;2、$42 Bmp;3、$FF JPEG 。据此进行判断。

 

  此外,Jpeg文件的格式是以$FF $D8开头的,以$FF $D9结尾。但是有时候也并不一定以$FF $D9结尾,因为一般Jpeg解读代码读到$FF $D9的时候就终止解读了,但文件并不一定非要结束,可以继续有内容。有的Jpeg文件会在文件末尾加入额外内容,作为隐藏内容藏在文件中。就是所云的图片中隐藏的秘密。

 

  综上所述,为了快速判断文件的图像内容是不是Jpeg文件格式的,可以预读一下文件头,如果是以$FF $D8开头,我们就可以认为文件是合法的Jpeg编码格式。

Delphi代码如下:
function IsGoodJpeg(fn: String): Boolean;
var
  strm: TFileStream;
  ch1, ch2: Byte;
  n: Integer;
begin
  Result := False;
  if not FileExists(fn) then
    Exit;

  ch1 := $00;
  ch2 := $00;
  strm := TFileStream.Create(fn, fmOpenRead);
  try
    n := SizeOf(ch1);
    if strm.Size > (n * 4) then
    begin
      strm.Read(ch1, n);
      strm.Read(ch2, n);
      if (ch1 = $ff) and (ch2 = $d8) then
        Result := True;
    end;
  finally
    strm.Free;
  end;
end;