我想知道 [如果有] 一种简单的方法来找出动画 gif 循环的次数,使用 PHP。
据我所知,此信息已编码到 gif 二进制文件的标头中(在类似于“NETSCAPE2.0”的字符串之后,值得一提),但我不知道如何阅读(无论是PHP 或任何文本编辑器,Sublime 给了我看起来像十六进制代码的东西,而 TextEdit 给了我废话)。
我假设我需要阅读文件查找上面的字符串,并希望它后面的文本是一个定义循环数的整数。也许?
有什么建议么?我很乐意玩弄任何疯狂的想法!
谢谢。
我想知道 [如果有] 一种简单的方法来找出动画 gif 循环的次数,使用 PHP。
据我所知,此信息已编码到 gif 二进制文件的标头中(在类似于“NETSCAPE2.0”的字符串之后,值得一提),但我不知道如何阅读(无论是PHP 或任何文本编辑器,Sublime 给了我看起来像十六进制代码的东西,而 TextEdit 给了我废话)。
我假设我需要阅读文件查找上面的字符串,并希望它后面的文本是一个定义循环数的整数。也许?
有什么建议么?我很乐意玩弄任何疯狂的想法!
谢谢。
这里有一些关于 gif 格式的信息。它似乎包括有关动画的信息:
http://giflib.sourceforge.net/whatsinagif/bits_and_bytes.html
这更具体地说明了您所询问的内容
http://giflib.sourceforge.net/whatsinagif/animation_and_transparency.html
我从如何使用 PHP 提取动画 GIF 的帧中找到了这个类GifFrameExtractor
您可以分别获得一组图像和一组持续时间:
$frameImages = $gfe->getFrameImages();
$frameDurations = $gfe->getFrameDurations();
结合这两种方法$frameImages*$frameDurations
将为您提供一次迭代的时间。
将其与动画开始到现在的时间进行比较。
如果不编写一些 js 代码,您将无法实现这一目标...
但你必须知道/计算 gif 的 1 个循环的时间长度。
在您的表格中添加
<input id='looper' type='hidden' name='loopingTime' value='0'/>
添加功能
function loaded(){
$('#looper').val($('#looper').val()+1);
//assuming that calculating time with precision 1second is enough to determine number of loops
setInterval(loaded,1000);
}
当 gif 开始动画时添加对此方法的调用
<img id="photo"
onload='loaded(this.id)'
src="a_gif_animation.gif"
alt="this is some alt text"
title="this is some title text" />
在您的操作方法中,您将有一个参数loopingTime
包含 gif 播放的秒数,但您必须以某种方式计算 gif 循环时间。