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(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:

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


$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:

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


$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:

Salida del ejemplo: Crear el logo de PHP con Imagick
To Top