当前位置: 首页 > 技术文档 > 正文
avatar

有时候jpg后缀图片其实是png格式的图片。这样我们就需要将真实的格式还原出来; 以上代码是成品中copy出来 […]


有时候jpg后缀图片其实是png格式的图片。这样我们就需要将真实的格式还原出来;

procedure TForm1.Button6Click(Sender: TObject);
var   //声明变量
  MyImage:TMemoryStream;   //内存流对象
  Buffer:Word;

begin
  if strtoint(edit3.Text)<strtoint(edit4.Text) then   //OpenDialog1是一个文件打开对话框
  begin
    MyImage:=TMemoryStream.Create; //建立内存流对象

    try
      MyImage.LoadFromFile(memo1.Lines.Strings[strtoint(edit3.Text)]); //把刚刚用户选择的文件载入到内存流中
      MyImage.Position := 0;   //移动指针到最开头的位置
      if MyImage.Size = 0 then   //如果文件大小等于0,那么
      begin
        ShowMessage('错误');
        Exit;
      end;
      MyImage.ReadBuffer(Buffer,2); //读取文件的前2个字节,放到Buffer里面
      if Buffer=$4D42 then //如果前两个字节是以4D42[低位到高位]
      begin
        CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.bmp'),False);
        deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end
      else
      if Buffer=$D8FF then //如果前两个字节是以D8FF[低位到高位]
      begin
        CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.jpg'),False);
        deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end
      else
      if Buffer=$4947 then
      begin
        CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.gif'),False);
        deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end
      else
      if Buffer=$050A then
      begin
         CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.pcx'),False);
         deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end
      else
      if Buffer=$5089 then
      begin
         CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.png'),False);
         deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end
      else
      if Buffer=$4238 then
      begin
         CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.psd'),False);
         deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end
      else
      if Buffer=$A659 then
      begin
         CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.ras'),False);
         deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end
      else
      if Buffer=$DA01 then
      begin
         CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.sgi'),False);
         deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end
      else
      if Buffer=$4949 then
      begin
         CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.TIFF'),False);
         deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end
      else   //如是其他类型的文件的话,直接显示错误
      begin
          CopyFile(pchar(memo1.Lines.Strings[strtoint(edit3.Text)]),pchar(memo1.Lines.Strings[strtoint(edit3.Text)]+'.err'),False);
          deletefile(memo1.Lines.Strings[strtoint(edit3.Text)]);
      end;
    finally
      MyImage.Free;   //释放内存流对象
    end;
    edit3.Text:=inttostr(strtoint(edit3.Text) +1);
    config_save;
    delay(100);
    button6.Click;
  end;

end;

以上代码是成品中copy出来的代码,意思是检测格式,并复制一份真实格式的出来+上后缀。
把错误的删除!

本文固定链接: https://blog.yanhualou.com/jishu/754.html | 烟花楼博客
标签:

delphi 检测图片格式类型:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter