我可以在我的操作系统中轻松地做到这一点。
convert -delay 1/1 -loop 0 *.gif animated.gif
但我在PHP API中找不到如何做到这一点。无需调整大小或任何其他操作,我只需使用一组帧进行动画处理。
我可以在我的操作系统中轻松地做到这一点。
convert -delay 1/1 -loop 0 *.gif animated.gif
但我在PHP API中找不到如何做到这一点。无需调整大小或任何其他操作,我只需使用一组帧进行动画处理。
虽然我不是PHP专家,但我知道这个问题并不太难。您想要做的是创建一个Imagick对象,您可以将帧附加到该对象上。对于每个帧,您都可以更改一些参数,例如时间等。
假设您使用的是从基本Web表单上传的图像,我编写了一个基本示例,循环遍历上传名称为“image0”的图像,其中“0”逐渐增加至包含的文件数。您当然可以通过在固定文件名上使用相同的方法或其他方式添加图像。
$GIF = new Imagick();
$GIF->setFormat("gif");
for ($i = 0; $i < sizeof($_FILES); ++$i) {
$frame = new Imagick();
$frame->readImage($_FILES["image$i"]["tmp_name"]);
$frame->setImageDelay(10);
$GIF->addImage($frame);
}
header("Content-Type: image/gif");
echo $GIF->getImagesBlob();
这个示例创建了一个Imagick对象, 这将成为我们的GIF。然后遍历上传到服务器的文件, 首先读取每一个文件(请记住,这种技术依赖于我上面描述的图像命名方式), 其次获取延迟值, 然后将其附加到要生成的GIF中。这就是基本想法,它可以产生你想要的效果 (希望如此)。
但是有很多可以调整的地方,您的配置可能会有所不同。我经常发现php.net Imagick API参考文档有点糟糕,但它仍然非常有用,我偶尔用它来参考标准ImageMagick。
希望这些内容能够满足您的需求。
$GIF->resetIterator();
函数以回到列表中的第一张图片......希望这能帮助节省别人大量的时间。 我是从这篇文章中找到这个解决方案的https://www.geeksforgeeks.org/php-imagick-morphimages-function/ - Ryan H
\
convert -delay 1/1 -loop 0 *.gif animated.gif``。 - hakreexec()
,但那样会很混乱,而我已经声明我想要使用API。 - joedborgglob
。 - hakreImagick::setImageDelay
;Imagick::getImageDelay
- hakre