Uso básico
Imagick faz com que a manipulação de imagem no PHP seja extremamente fácil através de uma interface orientada a objetos. Aqui está um exemplo rápido de como criar uma miniatura:
Example #1 Criando uma miniatura em Imagick
<?php
header('Content-type: image/jpeg');
$image = new Imagick('image.jpg');
// Se 0 for informado em um parâmetro de largura ou altura,
// a razão de aspecto é mantida
$image->thumbnailImage(100, 0);
echo $image;
?>
Usando SPL e outros recursos OO suportados no Imagick, pode ser simples redimensionar todos os arquivos em um diretório (útil para redimensionar em lote grandes imagens de câmeras digitais para serem visualizadas na web). Aqui usamos redimensionamento, pois podemos querer reter certos metadados:
Example #2 Criando uma miniatura de todos os arquivos JPG em um diretório
<?php
$images = new Imagick(glob('images/*.JPG'));
foreach($images as $image) {
// Informar 0 vai forçar a miniatura a manter a razão de aspecto
$image->thumbnailImage(1024,0);
}
$images->writeImages();
?>
Este é um exemplo de criação do reflexo de uma imagem. O reflexo é criado invertendo a imagem e sobrepondo um gradiente nela. Em seguida, a imagem original e o reflexo são sobrepostos em uma tela.
Example #3 Criando o reflexo de uma imagem
<?php
/* Lê a imagem */
$im = new Imagick("teste.png");
/* Faz a miniatura da imagem */
$im->thumbnailImage(200, null);
/* Cria uma borda para a imagem */
$im->borderImage(new ImagickPixel("white"), 5, 5);
/* Clona e inverte a imagem */
$reflection = $im->clone();
$reflection->flipImage();
/* Cria um gradiente. Ele será sobreposto no reflexo */
$gradient = new Imagick();
/* O gradiente precisa ser grande o suficiente para a imagem e para as bordas */
$gradient->newPseudoImage($reflection->getImageWidth() + 10, $reflection->getImageHeight() + 10, "gradient:transparent-black");
/* Compõe o gradiente no reflexo */
$reflection->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0);
/* Adiciona um pouco de opacidade. Requer ImageMagick 6.2.9 ou superior */
$reflection->setImageOpacity( 0.3 );
/* Cria uma tela vazia */
$canvas = new Imagick();
/* A tela precisa ser grande o suficiente para conter as duas imagens */
$width = $im->getImageWidth() + 40;
$height = ($im->getImageHeight() * 2) + 30;
$canvas->newImage($width, $height, new ImagickPixel("black"));
$canvas->setImageFormat("png");
/* Compõe a imagem original e o reflexo na tela */
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, 20, 10);
$canvas->compositeImage($reflection, imagick::COMPOSITE_OVER, 20, $im->getImageHeight() + 10);
/* Mostra a imagem */
header("Content-Type: image/png");
echo $canvas;
?>
O exemplo acima produzirá algo semelhante a:
Este exemplo ilustra como usar padrões de preenchimento no desenho.
Example #4 Preenchendo texto com gradiente
<?php
/* Cria um novo objeto Imagick */
$im = new Imagick();
/* Cria uma nova imagem que será usada como padrão de preenchimento */
$im->newPseudoImage(50, 50, "gradient:red-black");
/* Cria objeto ImagickDraw */
$draw = new ImagickDraw();
/* Inicia um padrão chamado "gradiente" */
$draw->pushPattern('gradiente', 0, 0, 50, 50);
/* Compõe o gradiente no padrão */
$draw->composite(Imagick::COMPOSITE_OVER, 0, 0, 50, 50, $im);
/* Fecha o padrão */
$draw->popPattern();
/* Usa o padrão chamado "gradiente" como preenchimento */
$draw->setFillPatternURL('#gradiente');
/* Define o tamanho da fonte para 52 */
$draw->setFontSize(52);
/* Escreve um texto */
$draw->annotation(20, 50, "Hello World!");
/* Cria um novo objeto de tela e uma imagem branca */
$canvas = new Imagick();
$canvas->newImage(350, 70, "white");
/* Desenha o ImagickDraw na tela */
$canvas->drawImage($draw);
/* borda preta de 1 pixel em torno da imagem */
$canvas->borderImage('black', 1, 1);
/* Define o formato para PNG */
$canvas->setImageFormat('png');
/* Mostra a imagem */
header("Content-Type: image/png");
echo $canvas;
?>
O exemplo acima produzirá algo semelhante a:
Trabalhando com GIFs animados
Example #5 Lê a imagem GIF e redimensiona todos os quadros
<?php
/* Cria um novo objeto Imagick e lê o arquivo GIF */
$im = new Imagick("exemplo.gif");
/* Redimensiona todos os quadros */
foreach ($im as $frame) {
/* quadros de 50x50 */
$frame->thumbnailImage(50, 50);
/* Define a tela virtual para o tamanho correto */
$frame->setImagePage(50, 50, 0, 0);
}
/* Observe que a função writeImages é usada no lugar de writeImage */
$im->writeImages("example_small.gif", true);
?>
Trabalhando com a primitiva de elipse e fontes customizadas
Example #6 Criando a logomarca do PHP
<?php
/* Define largura e altura na proporção da logomarca genuína do PHP */
$width = 400;
$height = 210;
/* Cria um objeto Imagick com tela transparente */
$img = new Imagick();
$img->newImage($width, $height, new ImagickPixel('transparent'));
/* Nova instância de ImagickDraw para desenhar a elipse */
$draw = new ImagickDraw();
/* Define cor de preenchimento roxa para a elipse */
$draw->setFillColor('#777bb4');
/* Define as dimensões da elipse */
$draw->ellipse($width / 2, $height / 2, $width / 2, $height / 2, 0, 360);
/* Desenha a elipse na tela */
$img->drawImage($draw);
/* Redefine a cor de preenchimento de roxa para preta para o texto (nota: reutilizando o objeto ImagickDraw) */
$draw->setFillColor('black');
/* Define a borda para a cor branca */
$draw->setStrokeColor('white');
/* Define a espessura da borda */
$draw->setStrokeWidth(2);
/* Define o espaçamento da fonte (valor negativo significa que as letras ficam mais próximas uma da outra) */
$draw->setTextKerning(-8);
/* Define a fonte e o tamanho usados na logomarca do PHP */
$draw->setFont('Handel Gothic.ttf');
$draw->setFontSize(150);
/* Centra o texto horizontalmente e verticalmente */
$draw->setGravity(Imagick::GRAVITY_CENTER);
/* Adiciona o texto central "php" com deslocamento Y de -10 na tela (dentro da elipse) */
$img->annotateImage($draw, 0, -10, 0, 'php');
$img->setImageFormat('png');
/* Define o cabeçalho adequado para PNG e mostra a imagem */
header('Content-Type: image/png');
echo $img;
?>
O exemplo acima produzirá algo semelhante a: