新普京网站-澳门新普京 > 前端 > Delphi从内存流中判断图片格式,简单判断图片类型

Delphi从内存流中判断图片格式,简单判断图片类型

2020/01/04 22:38

function ImageMIMEType(Source: string): string; 
var 
Mem: TMemoryStream; 
Buffer: Word; 
i: integer; 
const 
IMG_CLASS_UNKNOWN = 'unknown'; 
IMG_CLASS_ERROR = 'error'; 
IMG_CLASS_JPEG = 'image/jpeg'; 
IMG_CLASS_BITMAP = 'image/bmp'; 
IMG_CLASS_新普京网站 ,GIF = 'image/gif'; 
IMG_CLASS_PNG = 'image/png'; 
IMG_CLASS_PCX = 'image/pcx'; 
IMG_CLASS_PSD = 'image/psd'; 
澳门新普京 ,IMG_CLASS_RAS = 'image/ras'; 
IMG_CLASS_SGI = 'image/sgi'; 
IMG_CLASS_TIFF = 'image/tiff'; 

废话十分少说了,利用内部存款和储蓄器流来剖断文件的格式,其实决断文件的前多少个字节就可以大约的论断那些文件是怎么着类型的公文,比方
jpg文件 是 FFD8 (从未有到高位就要反过来 D8FF 上面都是千篇一律卡塔尔(قطر‎
BMP文件 是 424D ---4D42
其余的自身就不生机勃勃一列举了,想明白跟多文件类型分别是用哪些字符作为文件的早先的话,下载个C32asm只怕UE等那类16进制编辑器就足以见到了。
procedure TForm1.Button1Click(Sender: TObject卡塔尔; //Button1的单击事件
var   //评释变量
   MyImage:TMemoryStream;   //内部存款和储蓄器流对象
   Buffer:Word;
   i:integer;
begin
   if OpenDialog1.Execute then   //OpenDialog1是一个文件展开对话框,在Delphi组件面版的Dialog页中能够找到。
   begin
     MyImage:=TMemoryStream.Create; //创立内部存款和储蓄器流对象
try
     MyImage.LoadFromFile(OpenDialog1.FileName卡塔尔; //把刚刚客户选拔的公文载入到内部存款和储蓄器流中
     MyImage.Position := 0;   //移动指针到最起初的职分
     if MyImage.Size = 0 then   //假使文件大小等于0,那么
     begin
       //错误
       ShowMessage('错误');
       Exit;
     end;
     MyImage.ReadBuffer(Buffer,2卡塔尔国; //读取文件的前2个字节,放到Buffer里面

begin 
Mem := TMemoryStream.Create; 

     if Buffer=$4D42 then //假使前三个字节是以4D42[不如到高位]
     begin
       ShowMessage('BMP'卡塔尔; //那么这么些是BMP格式的文本
     end
     else if Buffer=$D8FF then //假若前八个字节是以D8FF[没有到高位]
    begin
         //JPEG
       ShowMessage('JPEG'卡塔尔国; //........同样 上面不注释了
     end
     else if Buffer=$4947 then
     begin
         //GIF
       ShowMessage('GIF');
     end
     else if Buffer=$050A then
     begin
         //PCX
       ShowMessage('PCX');
     end
     else if Buffer=$5089 then
     begin
         //PNG
       ShowMessage('PNG');
     end
     else if Buffer=$4238 then
     begin
        //PSD
       ShowMessage('PSD');
     end
     else if Buffer=$A659 then
     begin
        //RAS
       ShowMessage('RAS');
     end
     else if Buffer=$DA01 then
     begin
         //SGI
       ShowMessage('SGI');
     end
     else if Buffer=$4949 then
     begin
         //TIFF
       ShowMessage('TIFF');
     end
     else   //如是别的门类的文书的话,直接彰显错误
     begin
         //ERR
       ShowMessage('ERR');
     end; //if 
   end; //if
finally
MyImage.Free;   //释放内部存款和储蓄器流对象
end;
end;
地方的经过只是轻松的决断文件的前2个字节,即便想进一步可信一点来讲,能够把文件最后2个字节也剖断上。

try 
Mem.LoadFromFile(Source,',','); 
Mem.Position := 0; 
if Mem.Size = 0 then 
begin 
//错误 
Result := IMG_CLASS_ERROR; 
Exit; 
end; 

Mem.ReadBuffer(Buffer, 2,',','); 

上一篇:delphi读取webbrowse中的图片显示在Image中,Delphi提取网页中的图片 下一篇:jpeg图片压缩新普京网站: