PHP Imagick:将gif动画循环设置为none?

时间:2012-10-18 18:32:23

标签: php animation gif imagick

我已成功从图像目录生成动画gif。我无法弄清楚如何防止它循环,但它只是继续前进。我想我在ImageMagick中找到了设置,但我没有看到在Imagick PHP库中设置它的相应方法。有谁知道它是什么?

1 个答案:

答案 0 :(得分:3)

我花了一段时间才找到它,因为错过了通过IMagick文档。但是你可以使用IMagick设置GIF动画的循环。

当我查看在正确的ImageMagick代码中写出Netscape循环扩展的代码时,它使用内部变量作为名为iterations的图像,尽管在命令行上使用-loop。它在整个内部使用迭代,然后进入IMagick代码。


来自ImageMagick代码:coders/gif.c

1689        if ((GetPreviousImageInList(image) == (Image *) NULL) &&
1690                (GetNextImageInList(image) != (Image *) NULL) &&
1691                (image->iterations != 1))
1692              {
1693                /*
1694                  Write Netscape Loop extension.
1695                */
1696                (void) LogMagickEvent(CoderEvent,GetMagickModule(),
1697                   "  Writing GIF Extension %s","NETSCAPE2.0");
1698                (void) WriteBlobByte(image,(unsigned char) 0x21);
1699                (void) WriteBlobByte(image,(unsigned char) 0xff);
1700                (void) WriteBlobByte(image,(unsigned char) 0x0b);
1701                (void) WriteBlob(image,11,(unsigned char *) "NETSCAPE2.0");
1702                (void) WriteBlobByte(image,(unsigned char) 0x03);
1703                (void) WriteBlobByte(image,(unsigned char) 0x01);
1704                (void) WriteBlobLSBShort(image,(unsigned short) image->iterations);
1705                (void) WriteBlobByte(image,(unsigned char) 0x00);
1706              }

请参阅文档:IMagick::setImageIterations( int $iterations )

设置$iterations = 0使其无限循环。

帧之间的延迟是使用我相信的刻度格式设置的,使用: