我携带每个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;
2条答案
按热度按时间v1uwarro1#
存在旨在允许描述请求(或响应)的内容的机制,但是 * 任何 * 外部元数据可能是不可靠的,完全取决于所涉及的元数据的准确实现和设置。在一些情况下,元数据可能不正确或完全缺失。
幸运的是,与许多文件格式一样,您提到的图像文件类型的规范都要求使用特定的头来标识文件(或流)符合(或希望符合)相关规范。
first 3 bytes of a GIF file是:
您可能还希望检查随后的3个字节,以获得有效的GIF版本号,该版本号也以ASCII编码:
PNG文件的前8个字节具有以下值:
JPEG文件的前2个字节是:
因此,要检测响应流中的数据格式,您只需要检查流的最多前8个字节,以寻找这些预期的头值之一。
enxuqcxy2#
我找到了一种方法来做我想做的,因为有URL不显示扩展。
只需从服务器响应中提取图像类型:
image/jpeg
= JPGimage/gif
= GIFimage/png
= PNG