Ejemplos
PHP Manual

Uso básico

Imagick hace que la manipulación de imágenes en PHP sea extremadamente sencilla a través de una interfaz OO. Aquí está un ejemplo breve de cómo hacer una miniatura:

Ejemplo #1 Crear una miniatura con Imagick

<?php

header
('Content-type: image/jpeg');

$imagen = new Imagick('imagen.jpg');

// Si se proporciona 0 como parámetro de ancho o alto,
// se mantiene la proporción de aspecto
$imagen->thumbnailImage(1000);

echo 
$imagen;

?>

Al usar SPL y otras características OO soportadas en Imagick, puede ser sencillo redimensionar todos los archivos de un directorio (útil para la redimensión por lotes de muchas imágenes de cámara digital para que sean visibles desde una web). Aquí usamos redimensión, ya que queremos mantener cierta meta-información:

Ejemplo #2 Hacer una miniatura de todos los archivos JPG de un directorio

<?php

$imágenes 
= new Imagick(glob('imagenes/*.JPG'));

foreach(
$imágenes as $imagen) {

    
// Proporcionar 0 fuerza a thumbnailImage a mantener la proporción de aspecto
    
$imagen->thumbnailImage(1024,0);

}

$imágenes->writeImages();

?>

Este es un ejemplo de crear un reflejo de una imagen. El reflejo se crea volteando la imagen y poniendo una capa de gradiente sobre ella. Ambas, la imagen original y el reflejo, están sobrepuestas en un lienzo.

Ejemplo #3 Crear un reflejo de una imagen

<?php
/* Leer la imagen */
$im = new Imagick("test.png");

/* Miniaturizar la imagen */
$im->thumbnailImage(200null);

/* Crear un borde para la imagen */
$im->borderImage(new ImagickPixel("white"), 55);

/* Clonar la imagen y voltearla */
$reflejo $im->clone();
$reflejo->flipImage();

/* Crear un gradiente. Será sobrepuesto en el reflejo */
$gradiente = new Imagick();

/* El gradiente necesita ser más grande que la imagen y los bordes */
$gradiente->newPseudoImage($reflejo->getImageWidth() + 10$reflejo->getImageHeight() + 10"gradient:transparent-black");

/* Componer el gradiente con el reflejo */
$reflejo->compositeImage($gradienteimagick::COMPOSITE_OVER00);

/* Añadir algo de opacidad. Requiere ImageMagick 6.2.9 o superior */
$reflejo->setImageOpacity0.3 );

/* Crear un lienzo vacío */
$lienzo = new Imagick();

/* El lienzo necesita ser más grande para mantener ambas imágenes */
$ancho $im->getImageWidth() + 40;
$alto = ($im->getImageHeight() * 2) + 30;
$lienzo->newImage($ancho$alto, new ImagickPixel("black"));
$lienzo->setImageFormat("png");

/* Componer la imagen original y el reflejo sobre el lienzo */
$lienzo->compositeImage($imimagick::COMPOSITE_OVER2010);
$lienzo->compositeImage($reflejoimagick::COMPOSITE_OVER20$im->getImageHeight() + 10);

/* Imprimir la imagen */
header("Content-Type: image/png");
echo 
$lienzo;
?>

El resultado del ejemplo sería algo similar a:

Salida del ejemplo : Crear un reflejo de una imagen

Este ejemplo ilustra cómo usar patrones de relleno durante el dibujo.

Ejemplo #4 Rellenar un texto con un gradiente

<?php

/* Crear un nuevo objeto imagick */
$im = new Imagick();

/* Crear una nueva imagen. Será usada como patrón de relleno */
$im->newPseudoImage(5050"gradient:red-black");

/* Crear un objeto imagickdraw */
$dibujo = new ImagickDraw();

/* Iniciar un nuevo patrón llamado "gradient" */
$dibujo->pushPattern('gradient'005050);

/* Componer el gradiente con el patrón */
$dibujo->composite(Imagick::COMPOSITE_OVER005050$im);

/* Cerrar el patrón */
$dibujo->popPattern();

/* Usar el patrón llamado "gradient" como el relleno */
$dibujo->setFillPatternURL('#gradient');

/* Establecer el tamaño de fuente a 52 */
$dibujo->setFontSize(52);

/* Anotar algo de texto */
$dibujo->annotation(2050"Hello World!");

/* Crear un nuevo lienzo y una imagen blanca */
$lienzo = new Imagick();
$lienzo->newImage(35070"white");

/* Dibujar el objeto ImagickDraw sobre el lienzo */
$lienzo->drawImage($dibujo);

/* Borde negro de 1px alrededor de la imagen */
$lienzo->borderImage('black'11);

/* Establecer el formato a PNG */
$lienzo->setImageFormat('png');

/* Imprimir la imagen */
header("Content-Type: image/png");
echo 
$lienzo;
?>

El resultado del ejemplo sería algo similar a:

Salida del ejemplo : Rellenar texto con gradiente

Trabajar con imágenes GIF animadas

Ejemplo #5 Leer una imágen GIF y redimensionar todos los fotogramas

<?php

/* Crear un nuevo objeto imagick y leer el GIF */
$im = new Imagick("ejemplo.gif");

/* Redimensionar todos los fotogramas */
foreach ($im as $fotograma) {
 
/* Fotogramas de 50x50 */
 
$fotograma->thumbnailImage(5050);

 
/* Establecer el lienzo virtual para corregir el tamaño */
 
$fotograma->setImagePage(505000);
}

/* Observe: writeImages en vez de writeImage */
$im->writeImages("example_small.gif"true);
?>


Ejemplos
PHP Manual