Создайте анимированный GIF с PHP ImageMagick API - PullRequest
5 голосов
/ 23 февраля 2012

Я могу сделать это легко в моей ОС

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

Но я не могу найти, как это сделать в PHP API. Никакого изменения размера или чего-либо еще необходимого, у меня просто есть набор кадров, которые нужно анимировать.

1 Ответ

15 голосов
/ 11 апреля 2012

Хотя я не эксперт по PHP, я знаю, что эта проблема не слишком сложная. То, что вы хотите сделать, - это создать объект Imagick, к которому вы можете добавлять свои рамки. С каждым кадром вы можете изменять такие параметры, как время и т. Д.

Предполагая, что вы работаете с изображениями, которые загружены из базовой веб-формы, я написал базовый пример, который просматривает изображения, которые были загружены с именем «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. Файлы, которые были загружены на сервер, затем циклически перебираются, и каждый из них сначала читается (однако помните, что этот метод основан на том, что изображения названы так, как я описал выше), во-вторых, он получает значение задержки, и в-третьих, он добавляется ПОДАРОК, чтобы быть. Это основная идея, и она даст то, что вам нужно (я надеюсь).

Но есть что подделать, и ваша конфигурация может выглядеть иначе. Я всегда находил ссылку php.net Imagick API на отстой, но все же приятно иметь ее, и я время от времени использую ее для ссылок на вещи из стандартного ImageMagick.

Надеюсь, что это немного соответствует тому, что вы хотели.

...