Создать анимированный GIF из HTML с PHP - PullRequest
1 голос
/ 29 октября 2011

У меня есть следующий простой HTML, который мне нужно использовать для создания и сохранения нового анимированного GIF:

<div id="wrap">
  <div id="content">
    <p>Message here</p>
    <img src="image.jpg" />
  </div>
  <img src="image.gif" width="709" height="425" />
</div>

GIF в конце кода является анимированный GIF - я бы хотелбыть в состоянии накладывать текст и другой рисунок в формате JPEG поверх этого, сохраняя анимацию gif.

Во-первых, возможно ли это, а во-вторых, может кто-то указать мне правильное направление, если это так.

Полагаю, мне может понадобиться включить функцию PHPG imagegif ??

1 Ответ

1 голос
/ 29 октября 2011

Насколько мне известно, функции библиотеки PHP GD не способны генерировать анимированные GIF-файлы.

Вам придется полагаться на другие инструменты, такие как функция convert ImageMagik (вы можете вызвать ее через exec).

РЕДАКТИРОВАТЬ после комментария:

Если вы просто хотите создать не анимированный GIF-файл, этот процесс легко выполнить с помощью библиотек GD.

Скажем, у вас есть текст в переменной $txt и два изображения image1.jpg и image2.gif, которые вы хотите поместить в стек.

Конечный результат будет выглядеть как

    TEXT
-------------
|           |
|  IMAGE 1  |
|           |
 -----------
-------------
|           |
|  IMAGE 2  |
|           |
 -----------

Сначала откройте два изображения:

$i1 = imagecreatefromjpeg("image1.jpg");
$i2 = imagecreatefromgif("image2.gif");

Теперь найдите размер двух изображений.

$i1_w = imagesx($i1);
$i1_h = imagesy($i1);
$i2_w = imagesx($i2);
$i2_h = imagesy($i2);

Ваше окончательное изображение будет иметь

// Add 30px for the text, you can calculate this precisely 
// using imagettfbbox but be sure to use imagettftext 
// instead of imagestring later
$height = $i1_h + $i2_h + 30;
$width = max($i1_w, $i2_w);

Теперь вы создаете ваше выходное изображение

$img = imagecreatetruecolor($width, $height);

Поместить текст поверх

$black = imagecolorallocate($img, 0, 0, 0);
// Instead of using 1 as 2nd parameter you can use a font created 
// with imageloadfont. Also, you may want to calculate text coordinates
// so that it is centered etc.
imagestring($img, 1, 10, 10, $txt, $black);

Теперь добавьте изображения

imagecopy($img, $img1, ($width-$img1_w)/2, 30, 0, 0, $img1_w, $img1_h);
imagecopy($img, $img2, ($width-$img2_w)/2, 35+$img1_h, 0, 0, $img2_w, $img2_h);

Наконец, выведите gif

header('Content-Type: image/gif');
imagegif($img); // Or imagejpeg, imagepng etc.

Если вы просто хотите сохранить изображение, не показывая его, просто сделайте:

imagegif($img, "output.gif");
...