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

标签 delphi delphi-xe5 idhttp

我为每个 URL 携带图像并显示 TImage 。我将使用 JPG、GIF 和 PNG 进行工作。但我不知道如何找出每个文件具有什么样的扩展名,然后进行区分。如何获取 header 或任何其他方法让我知道什么类型的文件: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;

最佳答案

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

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

first 3 bytes of a GIF file是:

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

您可能还希望检查后续 3 个字节是否有有效的 GIF 版本号(也以 ASCII 编码):

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

first 8 bytes of a PNG file具有以下值:

137 80 78 71 13 10 26 10   (decimal)

first 2 bytes of a JPEG file是:

FF D8   (hex)

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

关于delphi - 找出文件类型(GIF、JPG、PNG)-DELPHI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909745/

相关文章:

安卓应用版本(RAD Studio XE5)

javascript - 如何在 TIDHttp (indy) delphi 上执行 javascript 函数?

sockets - TIdHTTP 返回 "Socket Error # 10060' #$D#$A'连接超时。”

Delphi INI 读取字符串限制

delphi - 如何隐藏 WebBrowser 直到网站完成加载/下载过程?

mysql - Datasnap/dbExpress 部署问题

c# - 调用Delphi dll函数时PInvokeStackImbalance

delphi - 用 Delphi 处理 CSV 文件

delphi - 在 delphi TForm 类中仅出现 'public' 错误