https://blog.csdn.net/my98800/article/details/53536774

废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如

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里面
 
     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个字节也判断上。

用Delphi从内存流中判断图片格式的更多相关文章

  1. 用Delphi从内存流中判断图片格式[转]

    http://blog.163.com/tfn2008%40yeah/blog/static/110321319201222243214337/ 用Delphi从内存流中判断图片格式[转] 2012- ...

  2. Delphi从内存流中判断图片格式(好多相关文章)

    废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如jpg文件 是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样)BMP文件  ...

  3. java中判断图片格式并且等比例压缩图片

    最近项目中需要判断上传的图片必须是png,jpg,gif三种格式的图片,并且当图片的宽度大于600px时,压缩图片至600px,并且等比例的压缩图片的高度. 具体的实现形式: 大致的思路是: 判断根据 ...

  4. C#内存流示例----->用内存流来读取图片

    背景:一个窗体.一个pictureBox.一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码: priva ...

  5. 【NPOI】通过NPOI从内存流中创建EXCEL

    一言不合就开始帖代码 XSSFWorkbook workbook = new XSSFWorkbook(); //创建工作簿 XSSFSheet sheet = (XSSFSheet)workbook ...

  6. ZH奶酪:PHP判断图片格式的7种方法

    以图片 $imgurl = "http://www.php10086.com/wp-content/themes/inove/img/readers.gif"; 为例: 思路1. ...

  7. PHP判断图片格式的七种方法小结

    <?php $imgurl = "http://www.jb51.net/images/logo.gif"; //方法1 echo $ext = strrchr($imgur ...

  8. 解决ie6中png图片格式不兼容问题

    在IE6中对图片格式png24支持度不高,如果使用的图片格式是png24,则会导致透明效果无法正常显示 解决方法: 1.可以使用png8来代替png24,即可解决问题,但是使用png8代替png24以 ...

  9. flash从数据流判断图片格式防止xss攻击

    前段时间测试人员报了一个flash的xss bug,经分析用了Loader.loadBytes且没做数据流格式校验的程序都会中招,自测方法只需一行代码: ExternalInterface.call( ...

随机推荐

  1. Kettle基本概念学习

    一,理解开发环境与生产环境. 比如,在windows或mac下设计好流程之后,把该设计文件上传到linux集群的机器上执行.那么,在windows下进行的工作即为开发环境,任务具体在linxu机器上执 ...

  2. C#检测鼠标移动消息

    当C#窗口上有其它控件时,窗口本身检测不到消息.1.使用WndProc.MouseMove不行,比如 protected override void WndProc(ref Message m) { ...

  3. Linux下解压缩

    1)对于.tar结尾的文件 tar -xf all.tar 2)对于.gz结尾的文件 gzip -d all.gz gunzip all.gz 3)对于.tgz或.tar.gz结尾的文件 tar -x ...

  4. 永久修改MySQL字符集(适用Mysql5.5、Mysql5.6、Mysql5.7以上)

    在my.ini文件里添加三个参数: 1.在[client]下添加 default-character-set=utf8 2.在[mysqld]下添加 character-set-server=utf8 ...

  5. keepalived高可用系列~通用基础

    简介:今天咱们来聊聊keepalived一 keepalived 架构 1  标准架构: keepalived+lvs/haproxy+后端 real server(mysql从库,nginx.myc ...

  6. Windows Server 2008 R2 服务器系统安装图文教程

    https://www.jb51.net/os/535658.html http://www.machenike.com/article.php?id=207

  7. Dubbo重试次数

    服务超时后重试次数[retries],不包含第一次调用,0代表不重试 *我们应该在幂等方法上设置重试次数[查询.删除.修改],在非幂等方法上禁止设置重试次数. ★幂等:指多次运行方法所产生的最终效果是 ...

  8. 【转载】Hadoop mapreduce 实现原理

    1.  如何用通俗的方法解释MapReduce MapReduce是Google开源的三大技术之一,是对海量数据进行“分而治之”计算框架.为了简单的理解并讲述给客户理解.我们举下面的例子来说明. 首先 ...

  9. linux 定期清除日志

    clearLog.sh #!/bin/sh find /usr/local/apache/logs -mtime + 30 -name "*.log" -exec rm {} \; ...

  10. k64 datasheet学习笔记3---Chip Configuration之Clock modules

    1.前言 本文主要讲述chip configure之clock配置相关的内容,主要包含如下三个部分: MCG configuration:Multipurpose clock generator OS ...