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(100, 0);
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
$im = new Imagick("test.png");
$im->thumbnailImage(200, null);
$im->borderImage(new ImagickPixel("white"), 5, 5);
$reflejo = $im->clone();
$reflejo->flipImage();
$gradiente = new Imagick();
$gradiente->newPseudoImage($reflejo->getImageWidth() + 10, $reflejo->getImageHeight() + 10, "gradient:transparent-black");
$reflejo->compositeImage($gradiente, imagick::COMPOSITE_OVER, 0, 0);
$reflejo->setImageOpacity( 0.3 );
$lienzo = new Imagick();
$ancho = $im->getImageWidth() + 40;
$alto = ($im->getImageHeight() * 2) + 30;
$lienzo->newImage($ancho, $alto, new ImagickPixel("black"));
$lienzo->setImageFormat("png");
$lienzo->compositeImage($im, imagick::COMPOSITE_OVER, 20, 10);
$lienzo->compositeImage($reflejo, imagick::COMPOSITE_OVER, 20, $im->getImageHeight() + 10);
header("Content-Type: image/png");
echo $lienzo;
?>
El resultado del ejemplo sería algo similar a:
Este ejemplo ilustra cómo usar patrones de relleno durante el dibujo.
Ejemplo #4 Rellenar un texto con un gradiente
<?php
$im = new Imagick();
$im->newPseudoImage(50, 50, "gradient:red-black");
$dibujo = new ImagickDraw();
$dibujo->pushPattern('gradient', 0, 0, 50, 50);
$dibujo->composite(Imagick::COMPOSITE_OVER, 0, 0, 50, 50, $im);
$dibujo->popPattern();
$dibujo->setFillPatternURL('#gradient');
$dibujo->setFontSize(52);
$dibujo->annotation(20, 50, "Hello World!");
$lienzo = new Imagick();
$lienzo->newImage(350, 70, "white");
$lienzo->drawImage($dibujo);
$lienzo->borderImage('black', 1, 1);
$lienzo->setImageFormat('png');
header("Content-Type: image/png");
echo $lienzo;
?>
El resultado del ejemplo sería algo similar a:
Trabajar con imágenes GIF animadas
Ejemplo #5 Leer una imágen GIF y redimensionar todos los fotogramas
<?php
$im = new Imagick("ejemplo.gif");
foreach ($im as $fotograma) {
$fotograma->thumbnailImage(50, 50);
$fotograma->setImagePage(50, 50, 0, 0);
}
$im->writeImages("example_small.gif", true);
?>
Trabajar con primitivas de elipse y tipos de letra personalizados
Ejemplo #6 Crear un logo de PHP
<?php
$ancho = 400;
$alto = 210;
$img = new Imagick();
$img->newImage($ancho, $alto, new ImagickPixel('transparent'));
$dibujo = new ImagickDraw();
$dibujo->setFillColor('#777bb4');
$dibujo->ellipse($ancho / 2, $alto / 2, $ancho / 2, $alto / 2, 0, 360);
$img->drawImage($dibujo);
$dibujo->setFillColor('black');
$dibujo->setStrokeColor('white');
$dibujo->setStrokeWidth(2);
$dibujo->setTextKerning(-8);
$dibujo->setFont('Handel Gothic.ttf');
$dibujo->setFontSize(150);
$dibujo->setGravity(Imagick::GRAVITY_CENTER);
$img->annotateImage($dibujo, 0, -10, 0, 'php');
$img->setImageFormat('png');
header('Content-Type: image/png');
echo $img;
?>
El resultado del ejemplo sería algo similar a: