2011-09-07 14 views
6

Si tengo un montón de recursos de imágenes que hice usando la biblioteca de GD en php, o si no un montón de marcos, ¿cómo puedo combinarlos en un gif animado? Tengo una serie de imágenes y marcos por segundo que me gustaría agregar.Crea un gif animado usando la biblioteca de GD

No puedo usar ImageMagick o FFMPEG, y preferiría usar la biblioteca de GD si fuera posible.

Aparentemente "Support for creating GIF animations is also available.", pero parece que no puedo encontrar la documentación sobre cómo acceder a esto desde dentro de PHP?

+1

posible duplicado de [PHP - ¿Crear un GIF animado simple a partir de dos imágenes JPEG?] (Http://stackoverflow.com/questions/2191367/php-create-simple-animated-gif-from-two-jpeg-images) – Mat

Respuesta

2

Buscando bien en Google reveló GIFEncoder.class.php encontrado en http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html
Este enlace requiere registro.

así que busqué un poco y que está incluido en el phpvideotoolkit code.google.com y se puede descargar en:
http://phpvideotoolkit.googlecode.com/svn-history/r6/trunk/phpvideotoolkit/adapters/ffmpeg-php/gifencoder/GIFEncoder.class.php

también hay una versión de Correcciones de bugs acaba de cambiar el nombre del archivo para GIFEncoder.class. phpvideotoolkit.php en el enlace de arriba.

No lo he probado por mi cuenta pero quizás pueda ayudarlo.

en el directorio principal del archivo php en code.google.com es también un ejemplo

mejor de las suertes

0

AFAIK gd lib que se incluye con PHP no admite la creación de GIF animados. Sin embargo, podría usar gifsicle.

+0

Cualquier forma sin acceso de línea de comando? – Cyclone

+0

Puede usar la función PHP exec() - ¿eso cuenta? :) O podrías usar las funciones PHP de ImageMagick, pero nunca las he usado. YMMV. – johndodo

4

Esto no se puede hacer con GD, pero me encontré con una gran biblioteca para ello. Aunque es un poco complicado, aquí hay un enlace a la biblioteca que hace gifs animados con php. Explica cómo usarlo a fondo. http://www.phpclasses.org/package/3163-PHP-Generate-GIF-animations-from-a-set-of-GIF-images.html

Usted puede mirar en mi ejemplo usando esta biblioteca:

Simplemente seleccione 2 fotografías y escritura para la velocidad 100 900 para la anchura y la altura. Los pondrá en una presentación animada de gif.

Este es el código para ese guión:

<?php 
if(isset($_POST['speed'])) 
{ 
    header('Content-type: image/gif'); 
    if(isset($_POST['download'])){ 
    header('Content-Disposition: attachment; filename="animated.gif"'); 
    } 
    include('GIFEncoder.class.php'); 
    function frame($image){ 
     ob_start(); 
     imagegif($image); 
     global $frames, $framed; 
     $frames[]=ob_get_contents(); 
     $framed[]=$_POST['speed']; 
     ob_end_clean(); 
    } 
    foreach ($_FILES["images"]["error"] as $key => $error) 
    { 
     if ($error == UPLOAD_ERR_OK) 
     { 
      $tmp_name = $_FILES["images"]["tmp_name"][$key]; 
      $im = imagecreatefromstring(file_get_contents($tmp_name)); 
      $resized = imagecreatetruecolor($_POST['width'],$_POST['height']); 
      imagecopyresized($resized, $im, 0, 0, 0, 0, $_POST['width'], $_POST['height'], imagesx($im), imagesy($im)); 
      frame($resized); 
     } 
    } 
    $gif = new GIFEncoder($frames,$framed,0,2,0,0,0,'bin'); 
    echo $gif->GetAnimation(); 
} 
?> 
<form action="" method="post" enctype="multipart/form-data"> 
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script src="jquery.MultiFile.js"></script> 
<script src="jquery.placeholder.js"></script> 
<input type="file" name="images[]" class="multi" /> 
<script> 
    $(function(){ 
     $('input[placeholder], textarea[placeholder]').placeholder(); 
    }); 
</script> 
    <SCRIPT language=Javascript> 
     <!-- 
     function isNumberKey(evt) 
     { 
     var charCode = (evt.which) ? evt.which : event.keyCode 
     if (charCode > 31 && (charCode < 48 || charCode > 57)) 
      return false; 

     return true; 
     } 
     //--> 
    </SCRIPT> 
<input name="speed" maxlength="10" type="text" placeholder="Speed of frames in ms" onkeypress="return isNumberKey(event)"> 
<input name="width" maxlength="4" type="text" placeholder="Width" onkeypress="return isNumberKey(event)"> 
<input name="height" maxlength="4" type="text" placeholder="Height" onkeypress="return isNumberKey(event)"> 
<input type="submit" name="download" value="Download!"> 
<input type="submit" name="preview" value="Preview!"> 
</form> 

Como se puede ver que hace referencia a la clase GIFEncoder encontrado en el primer enlace. También utiliza algunas validaciones de javascript y jQuery multiupload.

Por cierto, esta pregunta ya fue formulada.

+5

Si la pregunta ya se ha hecho, márquela como un duplicado; no publiques respuestas duplicadas – Mat

Cuestiones relacionadas