找出文件类型(GIF, JPG, PNG) - DELPHI



我携带图像每个URL和显示TImage。我将使用JPG, GIF和PNG。但是我不知道如何找出每个文件拥有什么样的扩展名,然后进行区分。我如何获得标题,或任何其他方法让我知道什么类型的文件:GIF、PNG或JPG?

var
  MS : TMemoryStream;
  GIf: TGIFImage;
  jpegimg: TJPEGImage;

begin
  MS := TMemoryStream.Create;
  GIf := TGIFImage.Create;
  jpegimg   := TJPEGImage.Create; ///////
  try
      try
        IdHTTP1.get('http://forum.wmonline.com.br/uploads/av-8929.jpg',MS);
        Ms.Seek(0,soFromBeginning);
        //Gif.LoadFromStream(MS);
        //Logo.Picture.Assign(GIF);
        jpegimg.LoadFromStream(MS);
        Logo.Picture.Assign(jpegimg);
      except
        ShowMessage('ERRO');
        Exit;
      end;
  finally
    FreeAndNil(GIF);
    FreeAndNil(MS);
    jpegimg.Free;  ////
  end;

有允许描述请求(或响应)内容的机制,但是任何外部元数据可能是不可靠的,完全依赖于所涉及的元数据的准确实现和设置。在某些情况下,元数据可能不正确或完全丢失。

幸运的是,与许多文件格式一样,您提到的图像文件类型的规范都要求使用特定的标头来标识文件(或流)是否符合(或希望符合)相关规范。

GIF文件的前3个字节是:

`G` `I` `F`    (ASCII)

您可能还希望检查后面的3个字节是否有有效的GIF版本号,也用ASCII编码:

`8` `9` `a`   or `8` `7` `a`

PNG文件的前8个字节的值:

137 80 78 71 13 10 26 10   (decimal)

JPEG文件的前两个字节是:

FF D8   (hex)

因此,要检测响应流中数据的格式,您最多只需要检查流的前8个字节,以查找这些预期的报头值之一。

我找到了一种方法来做我想做的事情,因为有不显示扩展名的url。

直接从服务器响应中提取图像类型:

header := IdHTTP1.Response.ContentType;

image/jpeg = JPG

image/gif = GIF

image/png = PNG

最新更新