php判断GIF图片是否为动画的方法

yipeiwu_com7年前PHP代码库

本文介绍了PHP判断GIF图片是动画的方法,具体步骤如下:

首先,gif动画是gif89格式的,发现文件开头是gif89。但是很多透明图片也是用的gif89格式,

GOOGLE到的:可以检查文件中是否包含:chr(0×21).chr(0xff).chr(0×0b).'NETSCAPE2.0'

chr(0×21).chr(0xff) 是gif图片中扩展功能段的标头,'NETSCAPE2.0'是扩展功能执行的程序名

程序代码如下:

<?php
function check($image){
$content= file_get_contents($image);
if(preg_match("/".chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0'."/",$content)){ 
return true;
}else{
return false;
}
}
if(check('/home/lyy/luoyinyou/2.gif')){
echo'真是动画';
}else{
echo'不是动画';
}
?>

这段代码还是可以再优化的:

因为实际上 chr(0×21).chr(0xff).chr(0×0b).'NETSCAPE2.0' 只在文件头部出现,可以 echo 来看看 ,但不是最头部,是在头部的某一个位置,所以,严格来说需要读取一部分文件,但不用全部,这样可以加快速度和节省内存。

程序可改写如下:

function check_animation($image_file){
$fp = fopen($image_file, 'rb');
$image_head = fread($fp,1024);
fclose($fp);
return preg_match("/".chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0'."/",$image_head) ? true : false;
}

测试发现,读取1024字节足够了,因为此时读取的数据流中正好包含了 chr(0×21).chr(0xff).chr(0×0b).'NETSCAPE2.0'

相关文章

PHP实现的简单分页类及用法示例

本文实例讲述了PHP实现的简单分页类及用法。分享给大家供大家参考,具体如下: <?php /* * 使用: * $page = new Page(连接符,查询语句,...

php使用imagecopymerge()函数创建半透明水印

php使用imagecopymerge()函数创建半透明水印

使用imagecopymerge() 函数创建半透明水印,供大家参考,具体内容如下 <?php // 加载要加水印的图像 $im = imagecreatefromjp...

PHP中调用ASP.NET的WebService的代码

其中有个web method像这样的: 复制代码 代码如下: [WebMethod] public string HelloWorld() { return "Hello World";...

phpMyAdmin2.11.6安装配置方法

1/无法载入mcrypt扩展,请检查PHP配置; 2/配置文件现在需要绝密的短语密码(blowfish_secret); 3/#2003-服务器没有响应。 为了以备不时之需,把遇到的这些...

PHP自动重命名文件实现方法

本文实例讲述了PHP自动重命名文件实现方法。分享给大家供大家参考。具体方法分析如下: PHP重命名文件名我们在实际开发过程中经常会使用到,比如用户上传文件或是一些缓存文件自动生成的功能我...