php gd gif动画,我可以检测使用PHP和GD的animationGIF?

在imagecreatefromgif()函数的PHP手册页中有一个简短的代码片段,应该是你所需要的:

由ZeBadger提供的图片评论#59787

在search同样问题的解决scheme时,我注意到php.net网站对Davide和Kris所指代码的后续操作,但根据作者的说法,内存密集程度更低,可能更less的磁盘密集。

我会在这里复制它,因为它可能是有趣的。

来源: http : //www.php.net/manual/en/function.imagecreatefromgif.php#88005

function is_ani($filename) { if(!($fh = @fopen($filename, 'rb'))) return false; $count = 0; //an animated gif contains multiple "frames", with each frame having a //header made up of: // * a static 4-byte sequence (\x00\x21\xF9\x04) // * 4 variable bytes // * a static 2-byte sequence (\x00\x2C) // We read through the file til we reach the end of the file, or we've found // at least 2 frame headers while(!feof($fh) && $count < 2) { $chunk = fread($fh, 1024 * 100); //read 100kb at a time $count += preg_match_all('#\x00\x21\xF9\x04.{4}\x00[\x2C\x21]#s', $chunk, $matches); } fclose($fh); return $count > 1; }

这是工作function:

/** * Thanks to ZeBadger for original example, and Davide Gualano for pointing me to it * Original at http://it.php.net/manual/en/function.imagecreatefromgif.php#59787 **/ function is_animated_gif( $filename ) { $raw = file_get_contents( $filename ); $offset = 0; $frames = 0; while ($frames < 2) { $where1 = strpos($raw, "\x00\x21\xF9\x04", $offset); if ( $where1 === false ) { break; } else { $offset = $where1 + 1; $where2 = strpos( $raw, "\x00\x2C", $offset ); if ( $where2 === false ) { break; } else { if ( $where1 + 8 == $where2 ) { $frames ++; } $offset = $where2 + 1; } } } return $frames > 1; }

如果给定的文件太大,用file_get_contents读取整个文件可能会花费太多的内存。 我已经重新考虑了以前给出的函数,它只读取了足够的字节来检查帧,并且一find至less2帧就返回。

<?php /** * Detects animated GIF from given file pointer resource or filename. * * @param resource|string $file File pointer resource or filename * @return bool */ function is_animated_gif($file) { $fp = null; if (is_string($file)) { $fp = fopen($file, "rb"); } else { $fp = $file; /* Make sure that we are at the beginning of the file */ fseek($fp, 0); } if (fread($fp, 3) !== "GIF") { fclose($fp); return false; } $frames = 0; while (!feof($fp) && $frames < 2) { if (fread($fp, 1) === "\x00") { /* Some of the animated GIFs do not contain graphic control extension (starts with 21 f9) */ if (fread($fp, 1) === "\x2c" || fread($fp, 2) === "\x21\xf9") { $frames++; } } } fclose($fp); return $frames > 1; }

animationGIF必须具有以下string

"\x21\xFF\x0B\x4E\x45\x54\x53\x43\x41\x50\x45\x32\x2E\x30"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ant man 什么意思_浅谈为什么很多蓝牙模块厂家选择nRF52832?

浅谈为什么很多蓝牙模块厂家选择nRF52832&#xff1f;现在蓝牙低功耗(BLE)SOC作为新一代蓝牙&#xff0c;以其低功耗的优势&#xff0c;正凸显出强大的市场竞争力&#xff0c;而其中Nordic公司的nRF52832这一款低功耗蓝牙芯片更是受到大家的欢迎。Nordic是一家无晶圆厂半导体公…

实例9:python

#题目&#xff1a;暂停一秒输出。 #程序分析&#xff1a;使用 time 模块的 sleep() 函数 #!/usr/bin/python -- coding: UTF-8 -- import time l[1,2,3,4] for i in range(len(l)): print (l[i]) time.sleep(5) # 暂停一秒输出

php对话框制作,织梦系统“提示窗口对话框类”详解,oxwindow.class.php、catalog_do.php...

如果对织梦系统做过二次开发或学深入研究过的话&#xff0c;一定会知道在我们做织梦二次开发时&#xff0c;一般会把php文件以及对应的模板文件起的名字&#xff0c;除了扩展名外&#xff0c;其它都一样&#xff0c;这是织梦文件起名的一个特点。例如&#xff0c;index_body.ph…

B-JUI文档、下载

概述 特别说明 本文档仅适用于最新版的B-JUI&#xff0c;网站首页或下载页可以查看B-JUI的最后更新时间。 B-JUI前端管理框架适用于快速开发各类WEB管理系统&#xff0c;可与任意后端程序&#xff08;java、php、.net...&#xff09;配合使用。 B-JUI基于Bootstrap样式及jQuery…

Python time sleep()方法

描述 Python time sleep() 函数推迟调用线程的运行&#xff0c;可通过参数secs指秒数&#xff0c;表示进程挂起的时间。 语法 sleep()方法语法&#xff1a; time.sleep(t) 参数 • t – 推迟执行的秒数。 返回值 该函数没有返回值。 实例 以下实例展示了 sleep() 函数的使用方法…

vba xml 怎么设置父节点_熊二做了一个xml报文处理的开源库easyxml

❝自信、冷静、专注。—— TM 熊的自我勉励❞1. 前言熊二从去年开始&#xff0c;因项目需求接触到xml报文的处理&#xff0c;也是我第一次学习用C/C的方式处理基于DOM模型的xml报文。因为本人比较懒hhh&#xff0c;所以第一反应就是去看看网上有没有什么大家都在用的比较好的xm…

Linux以oracle用户登录,Linux_oracle 10G for linux常用命令,首先以Oracle用户登录1、 - phpStudy...

oracle 10G for linux常用命令首先以Oracle用户登录1、 $/oracle/oracle/app/product/101/bin/dbstart&#xff1a;启动数据库。2、 $/oracle/oracle/app/product/101/bin/dbshut&#xff1a;关闭数据库。3、 $/oracle/oracle/app/product/101/bin/dbca&#xff1a;数据库配置助…

实例10:python

#题目&#xff1a;暂停一秒输出&#xff0c;并格式化当前时间。 #!/usr/bin/python -- coding: UTF-8 -- import time print (time.strftime(’%Y-%m-%d %H:%M:%S’,time.localtime(time.time()))) 暂停一秒 time.sleep(1) print (time.strftime(’%Y-%m-%d %H:%M:%S’,…

axios、ajax和xhr前端发送测试

其实axios和ajax都对原生的xhr进行了封装&#xff0c;个人感觉还是axios简洁、方便&#xff0c;尤大大都让我们转axios了&#xff0c;确实对于ajax好了不少&#xff0c;它支持了promise对象&#xff0c;支持js最新的规范。简单易用。 <!DOCTYPE html> <html lang"…

Python time strftime()方法

描述 Python time strftime() 函数接收以时间元组&#xff0c;并返回以可读字符串表示的当地时间&#xff0c;格式由参数format决定。 语法 strftime()方法语法&#xff1a; time.strftime(format[, t]) 参数 • format – 格式字符串。 • t – 可选的参数t是一个struct_time对…

iview 可以选择当天 禁用_人脸识别刚要普及,怎么就被禁用了?|人脸识别|人脸信息|世超|rekognition...

点击播放 GIF 0.5M人脸识别大家都不陌生了&#xff0c;从 iPhone 上面的 Face ID 再到支付宝刷脸支付&#xff0c;这个曾经只有在科幻电影上面才能见到的技术逐渐变得越来越司空见惯。点击播放 GIF 0.4M按理来讲&#xff0c;一项方便的技术应该越来越普及才对&#xff0c;不过世…

oracle ytd,hana ytd计算

YTD解答方案要求&#xff1a;输出字段: 年月, YTD金额因为我这边只有system一个账号&#xff0c;就用system账号写合同表的结构和数据如下:create column table "SYSTEM"."CONTRACTS"("CONTRACT_ID" INTEGER null, --合同ID"START_DATE&qu…

Python time mktime()方法

描述 Python time mktime() 函数执行与gmtime(), localtime()相反的操作&#xff0c;它接收struct_time对象作为参数&#xff0c;返回用秒数来表示时间的浮点数。 如果输入的值不是一个合法的时间&#xff0c;将触发 OverflowError 或 ValueError。 语法 mktime()方法语法&…

linux 识别文件类型,技术|Linux 中 7 个判断文件系统类型的方法

文件通过文件系统在磁盘及分区上命名、存储、检索以及更新&#xff0c;文件系统是在磁盘上组织文件的方式。文件系统分为两个部分&#xff1a;用户数据和元数据(文件名、创建时间、修改时间、大小以及目录层次结构中的位置等)。在本指南中&#xff0c;我们将用 7 种方法来识别你…

二分归并排序算法_第五篇排序算法|归并排序

0x01&#xff0c;前言闲叙最近几年很少看电视了&#xff0c;因为没时间看了&#xff0c;除了偶尔刷刷头条&#xff0c;基本上不会花大块的时间沉迷于电视剧&#xff0c;综艺&#xff0c;这或许就是短视频时代所带来的一些改变吧&#xff0c;我们都会深受其中。0x02&#xff0c;…

Python time asctime()方法

描述 Python time asctime() 函数接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"&#xff08;2008年12月11日 周二18时07分14秒&#xff09;的24个字符的字符串。 语法 asctime()方法语法&#xff1a; time.asctime([t])) 参数 • t – 9个元素的元组…

linux系统访问文件夹ls,Linux系统目录结构,文件类型以及ls、alias命令

一、Linux目录结构登录系统之后&#xff0c;在当前命令窗口输入以下指令&#xff0c;/是Linux操作系统里最核心的一个目录&#xff0c;所有的文件和目录全部在它下面&#xff0c;所以称为“根目录”&#xff1a;# ls / //列出根目录下的文件得到如图结果&#xff1a;如图上图所…

我所理解的闭包

闭包最主要概念&#xff1a;有权访问另一个函数作用域内变量的函数 function add(){var result;result function(x,y){return yx } return result }var sum new add(); console.log(sum(10,20))/*30*/ 函数会执行的主要原因就在于() function createFunct…

qq文件对方接收后一定会有提示吗_为什么微信、QQ不推出已读功能?因为它敢出网友就敢卸载...

12月14日&#xff0c;腾讯 QQ突然发起了一个"很吓人"的调查——你希望 QQ 出已读功能吗&#xff1f;在短时间内&#xff0c;有 超过3000 人参与&#xff0c;其中有 2660 人(71.6%)投票 "你出我就卸载 QQ"选项&#xff0c;大家旗帜鲜明地表示&#xff0c;并…

Python time localtime()方法

描述 Python time localtime() 函数类似gmtime()&#xff0c;作用是格式化时间戳为本地的时间。 如果sec参数未输入&#xff0c;则以当前时间为转换标准。 DST (Daylight Savings Time) flag (-1, 0 or 1) 是否是夏令时。 语法 localtime()方法语法&#xff1a; time.localt…