【问题标题】:How do I determine how many times a gif loops using PHP如何确定使用 PHP 的 gif 循环次数
【发布时间】:2013-09-27 22:28:10
【问题描述】:

我想知道 [是否有] 一种使用 PHP 来找出动画 gif 循环次数的简单方法。

据我所知,此信息已编码到 gif 二进制文件的标头中(在类似于“NETSCAPE2.0”的字符串之后,值得一提),但我不知道如何阅读(在 PHP 或任何文本编辑器中,Sublime 给了我看起来像十六进制代码的东西,而 TextEdit 给了我废话)。

我假设我需要阅读文件查找上述字符串,希望后面的文本将是一个定义循环数的整数。也许?

有什么建议吗?我很乐意尝试任何疯狂的想法!

谢谢。

【问题讨论】:

  • 我不是 100% 确定,我已经有一段时间没有使用它了,但是 ImageMagick 可能有一些东西 - 如果你的服务器允许你安装它 - 它有点内存:imagemagick.org
  • 理论上,您可以为任意整数个循环制作 GIF 动画。但实际上,它要么是一次,要么是无限的。
  • 感谢@CD001,我宁愿避免使用内存不足的库,但会给它一个打击。目前假设 gif 无限循环,因为我同意 Blazemonger 的假设;只是想知道,不然我会烦的!

标签: php animated-gif


【解决方案1】:

这里有一些关于 gif 格式的信息。它似乎包含有关动画的信息:

http://giflib.sourceforge.net/whatsinagif/bits_and_bytes.html

这更具体地说明了您所询问的内容

http://giflib.sourceforge.net/whatsinagif/animation_and_transparency.html

【讨论】:

  • 很有趣,我会消化一下,看看能不能解决问题。谢谢。
【解决方案2】:

我从How to extract frames of an animated GIF with PHP找到了这个课程GifFrameExtractor

您可以分别获得一组图像和一组持续时间:

$frameImages = $gfe->getFrameImages();
$frameDurations = $gfe->getFrameDurations();

结合这两种方法$frameImages*$frameDurations 将为您提供一次迭代的时间。

比较与动画开始到现在的时间。

【讨论】:

  • 谢谢!我也在使用该库,它非常适合提取帧和帧持续时间,但它并没有告诉我 Gif 打算循环多少次(N 次或无限次)。
  • 恐怕我还是不明白。我不明白知道单次迭代的持续时间如何帮助我确定它将循环多少次?这不在浏览器中,而是在命令行中。我正在批处理许多图像,如果这能澄清什么?
【解决方案3】:

如果不编写一些 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 循环时间。

【讨论】:

  • 这是一个 JS 实现。我在 PHP 之后。还是谢谢。
  • 我很困惑...如果不在浏览器中,您在哪里使用 PHP 显示您的 gif?
  • 服务器 cron 作业正在处理图像,而不是在浏览器中运行。
猜你喜欢
  • 2022-12-02
  • 2010-10-30
  • 2018-04-06
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 2023-01-01
  • 1970-01-01
相关资源
最近更新 更多