Saltar al contenido

PHP – ¿Crear un GIF animado simple a partir de dos imágenes JPEG?

Siéntete en la libertad de compartir nuestros post y códigos con otro, necesitamos tu ayuda para ampliar nuestra comunidad.

Solución:

Para obtener una solución agradable, rápida y más reciente, consulte esta respuesta SO.

Para una solución aún más reciente, aquí está mi bifurcación, con una serie de pequeñas correcciones y mejoras. Un ejemplo de ello de una aplicación real:

$anim = new GifCreatorAnimGif();

$gif = $anim->create($image_files);
//file_put_contents("test.gif", $gif);

header("Content-type: image/gif");
echo $gif;

(Requiere PHP5.3 con GD2).

Ejemplo que funciona con PHP 5.6 y GD 2.4.11:

require_once "AnimGif.php";

/*
 * Create an array containing file paths, resource var (initialized with imagecreatefromXXX), 
 * image URLs or even binary code from image files.
 * All sorted in order to appear.
 */
$image_files = array(
    //imagecreatefrompng("/../images/pic1.png"), // Resource var
    //"/../images/pic2.png", // Image file path
    //file_get_contents("/../images/pic3.jpg"), // Binary source code
    'https://yt3.ggpht.com/-KxeE9Hu93eE/AAAAAAAAAAI/AAAAAAAAAAA/D-DB1Umuimk/s100-c-k-no-mo-rj-c0xffffff/photo.jpg', // URL
    'https://media.licdn.com/mpr/mpr/shrinknp_100_100/AAEAAQAAAAAAAAloAAAAJDRkZGY2MWZmLTM1NDYtNDBhOS04MjYwLWNkM2UzYjdiZGZmMA.png', // URL
    'http://is5.mzstatic.com/image/thumb/Purple128/v4/e4/63/e7/e463e779-e6d0-0c3d-3ec1-97fdbaae230a/source/100x100bb.jpg' // URL
);

/*
 * Create an array containing the duration (in millisecond) of each frame.
 */
$durations_millis = array(
    1000,
    2000,
    3000
);

/*
 * Fix durations.
 */
$durations = array();
for ($i = 0; $i < count($durations_millis); $i++) 
    $durations[$i] = $durations_millis[$i] / 10;


/*
 * Specify number of loops. (0 = infinite looping.)
 */
$num_loops = 0;

/*
 * Create gif object.
 */
$anim_gif = new GifCreatorAnimGif();
$gif_object = $anim_gif->create($image_files, $durations, $num_loops);

/*
 * Get the animated GIF binary.
 */
$gif_binary = $gif_object->get();

/*
 * Set the file name of the saved/returned animated GIF.
 */
$file_name = "animated.gif";

/*
 *  Optionally, save animated GIF in a folder as a GIF:
 */
//file_put_contents($file_name, $gif_binary);

/*
 * Optionally, return the animated GIF to client.
 */
header("Content-type: image/gif");
header('Content-Disposition: filename="' . $file_name . '"'); // Optional
echo $gif_binary;

/*
 * All done.
 */
exit;

No es posible usar las funciones GD estándar que vienen preempaquetadas con PHP.

Hay un clase en phpclasses.org para esto. Yo nunca lo he usado, pero lo usan muchos otros paquetes.

Alternativamente, si tiene acceso a ImageMagick desde PHP, utilizando el MagickWand biblioteca o la línea de comando, úsela. Con ImageMagick, no hay problema.

  • Conceptos básicos de animación de ImageMagick v6 (del manual de mensajería instantánea)

  • Crear una imagen GIF animada

Esto no se puede hacer con GD pero encontré una gran biblioteca para ello. Sin embargo, es un poco complicado, así que aquí hay un enlace a la biblioteca que crea 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

Seleccione 2 imágenes y escriba 100 para velocidad 900 para ancho y alto. Los pondrá en una presentación de diapositivas gif animada.

Aquí está el código para ese script:

 $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();

?>

Como puede ver, hace referencia a la clase GIFEncoder que se encuentra en el primer enlace. También usa alguna validación de javascript y jQuery multiupload.

Nota: esta pregunta ya se ha formulado.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *