2012-02-23 49 views
5

我可以在我的OS制作GIF动画与PHP的ImageMagick的API

convert -delay 1/1 -loop 0 *.gif animated.gif 

容易做,但我找不到如何在PHP API中做到这一点。没有调整大小或任何需要,我刚刚得到一组需要动画的帧。

+0

对于初学者来说,你可以使用[执行运算符(http://php.net/manual/en/language.operators.execution.php)(反引号):'\'转换-delay 1/1 -loop 0 * .gif animated.gif \''。 – hakre 2012-02-23 17:19:22

+0

或'exec()',但这非常混乱,我已经说过我想要使用API​​ – jdborg 2012-02-23 17:26:26

+0

是的它是比实际答案更多的评论。手册说什么?它应该提供我认为的界面。 – hakre 2012-02-23 17:27:41

回答

13

虽然我不是一个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的东西。

希望这有点符合你以后的样子。

+0

对于写得很好的答案,但它似乎并不奏效。我正在制作一系列文件,然后用你已经完成的代码(以及http://www.php.net/manual/en/imagick.addimage.php中的最后一个例子)对每个文件进行修改,但是我只看到是最后一张图片。即使我设置为500ms并等待。我想循环,但无法找到。 – jdborg 2012-04-12 16:17:31

+0

啊,这个工作,如果你使用writeImages,而不是回声。我宁可回应。有任何想法吗? – jdborg 2012-04-12 16:23:39

+0

我的不好,我忘了一个重要的细节,编辑答案:) getImagesBlob()方法对应于writeImages()中的第二个参数设置为true。这将回应一个动画GIF作为一个blob,应该工作。 – fredrikekelund 2012-04-13 17:40:06