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


Posted in PHP onSeptember 04, 2020

本文介绍了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
function IsAnimatedGif($filename)
{
	$fp = fopen($filename, 'rb');
	$filecontent = fread($fp, filesize($filename));
	fclose($fp);
	return strpos($filecontent,chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0') === FALSE?0:1;
}
echo IsAnimatedGif("51windows.gif");
?>

到此这篇关于php判断GIF图片是否为动画的方法的文章就介绍到这了,更多相关php判断GIF图片是否为动画内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
我用php+mysql写的留言本
Oct 09 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 PHP
在 Laravel 项目中使用 webpack-encore的方法
Jul 21 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 #PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
Jul 08 #PHP
php中出现空白页的原因及解决方法汇总
Jul 08 #PHP
php之Smarty模板使用方法示例详解
Jul 08 #PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 #PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 #PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 #PHP
You might like
调频问题解答
2021/03/01 无线电
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
javascript Math.random()随机数函数
2009/11/04 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
Js+Jq获取URL参数的集中方法示例代码
2014/05/20 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
21行Python代码实现拼写检查器
2016/01/25 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
利用Python命令行传递实例化对象的方法
2016/11/02 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
Python计算信息熵实例
2020/06/18 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
应届生简历中的自我评价
2014/01/13 职场文书
大学生就业自我推荐信
2014/05/10 职场文书
学校百日安全活动总结
2015/05/07 职场文书
电工生产实习心得体会
2016/01/22 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书
MySQL数据库事务的四大特性
2022/04/20 MySQL
Django框架模板用法详解
2022/06/10 Python