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

yipeiwu_com5年前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'

相关文章

利用Ffmpeg获得flv视频缩略图和视频时间的代码

利用Ffmpeg获得flv视频缩略图和视频时间的代码

问题描述;获得flv视频的缩略图和视频时间长度 谷歌了半天发现可以使用Ffmpeg获得视频的一些信息,先介绍一下FFMEPG 这里简单说一下:FFmpeg是用于录制、转换和流化音频和...

php简单对象与数组的转换函数代码(php多层数组和对象的转换)

复制代码 代码如下: function arrayToObject($e){ if( gettype($e)!='array' ) return; foreach($e as $k=&g...

php数组实现根据某个键值将相同键值合并生成新二维数组的方法

本文实例讲述了php数组实现根据某个键值将相同键值合并生成新二维数组的方法。分享给大家供大家参考,具体如下: 源数据: $infos = array( array( 'a...

PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明

举例说明: 在Windows环境下:原本在php4.3.0中运行正常的程序,在4.3.1中为何多处报错,大体提示为:Notice:Undefined varialbe:变量名称. 例如有...

php编写批量生成不重复的卡号密码代码

闲的蛋疼的时候,顺便加强下自己对PHP中数组操纵的一些技巧,就写了下面的一段小代码,可以随机生成卡号密码对应的数组,并且自动去重复,思路没有,纯粹瞎掰。 <?php h...