Manipular imagens em PHP com as bibliotecas GD e Imagick

Manipular imagens em PHP com as bibliotecas GD e Imagick

No desenvolvimento web é frequente ter de trabalhar imagens: avatares, banners, miniaturas ou qualquer outra imagem que o teu site tenha de mostrar. O PHP traz várias bibliotecas para o tratamento de imagens, com destaque para a GD e a Imagick. Este artigo mostra as principais funcionalidades de ambas, com exemplos de código para usares na tua aplicação PHP.

Usar a biblioteca GD em PHP

A GD é uma biblioteca do PHP para manipular imagens. Vem incluída na maioria das instalações do PHP por omissão, o que faz dela uma solução simples e sempre à mão. A GD suporta os seguintes formatos de imagem: JPG, PNG, GIF, BMP e WBMP.

Carregar e mostrar uma imagem com a GD

Para carregar uma imagem com a GD, usa a função imagecreatefrom*() correspondente ao tipo de imagem (jpg, png, gif, etc.). Devolve um recurso GD que representa a imagem carregada em memória. Depois podes usar header e a função image*() correspondente ao formato (imagejpeg, imagepng, imagegif, etc.) para enviar a imagem para o navegador.

php
<?php
// Carregar a imagem num recurso GD
$image = imagecreatefromjpeg('image.jpg');

// Mostrar a imagem
header('Content-Type: image/jpeg');
imagejpeg($image);

Redimensionar uma imagem com a GD

Para redimensionar uma imagem com a GD, usa a função imagecopyresampled. Copia e redimensiona uma imagem GD para as dimensões que lhe indicares, com interpolação para manter a qualidade da imagem redimensionada.

php
<?php
// Carregar a imagem num recurso GD
$image = imagecreatefromjpeg('image.jpg');

// Redimensionar a imagem
$image_resized = imagecreatetruecolor(200, 200);
imagecopyresampled($image_resized, $image, 0, 0, 0, 0, 200, 200, imagesx($image), imagesy($image));

// Mostrar a imagem redimensionada
header('Content-Type: image/jpeg');
imagejpeg($image_resized);

Acrescentar texto a uma imagem com a GD

Para acrescentar texto a uma imagem com a GD, usa a função imagettftext. Desenha texto sobre uma imagem GD, indicando a fonte, o tamanho, o ângulo e a cor do texto.

php
<?php
// Carregar a imagem num recurso GD
$image = imagecreatefromjpeg('image.jpg');

// Acrescentar texto à imagem
$text_color = imagecolorallocate($image, 0, 0, 0);
imagettftext($image, 20, 0, 10, 30, $text_color, 'arial.ttf', 'Hello World !');

// Mostrar a imagem
header('Content-Type: image/jpeg');
imagejpeg($image);

Usar a biblioteca Imagick

A Imagick é outra biblioteca do PHP para o tratamento de imagens. Oferece funcionalidades mais avançadas do que a GD, como a gestão de camadas e de máscaras, a conversão de formato, a deteção de contornos e a redução de ruído. A Imagick suporta um grande número de formatos de imagem, incluindo formatos vetoriais como o SVG.

Para usares a Imagick, tens primeiro de confirmar que a extensão PHP imagick está instalada e ativada no teu servidor. Podes verificá-lo com o seguinte comando:

php
php -m | grep imagick

Se a Imagick aparecer na lista das extensões carregadas, podes usar as classes e os métodos da biblioteca no teu código PHP. Caso contrário, terás de instalar e ativar a extensão Imagick no servidor.

Carregar e mostrar uma imagem com a Imagick

Para carregar uma imagem com a Imagick, cria um objeto da classe Imagick indicando o caminho da imagem. Esse objeto representa a imagem carregada em memória e podes usar os seus métodos para a manipular. Para a mostrar, basta um echo sobre o objeto Imagick.

php
<?php
// Carregar a imagem num objeto Imagick
$imagick = new Imagick('image.jpg');

// Mostrar a imagem
header('Content-Type: image/jpeg');
echo $imagick;

Redimensionar uma imagem com a Imagick

Para redimensionar uma imagem com a Imagick, usa o método resizeImage do objeto Imagick. Este método redimensiona a imagem para as dimensões indicadas, com um filtro de resampling para manter a qualidade da imagem redimensionada. A Imagick propõe vários filtros de resampling, como FILTER_LANCZOS, FILTER_BOX ou FILTER_CUBIC.

php
<?php
// Carregar a imagem num objeto Imagick
$imagick = new Imagick('image.jpg');

// Redimensionar a imagem
$imagick->resizeImage(200, 200, Imagick::FILTER_LANCZOS, 1);

// Mostrar a imagem redimensionada
header('Content-Type: image/jpeg');
echo $imagick;

Acrescentar texto a uma imagem com a Imagick

Para acrescentar texto a uma imagem com a Imagick, usa o método annotateImage do objeto Imagick. Este método acrescenta texto à imagem indicando a fonte, o tamanho, o ângulo e a cor do texto.

php
<?php
// Carregar a imagem num objeto Imagick
$imagick = new Imagick('image.jpg');

// Acrescentar texto à imagem
$draw = new ImagickDraw();
$draw->setFont('arial.ttf');
$draw->setFontSize(20);
$draw->setFillColor('black');
$imagick->annotateImage($draw, 10, 30, 0, 'Hello World !');

// Mostrar a imagem
header('Content-Type: image/jpeg');
echo $imagick;

Conclusão

Neste artigo vimos as principais funcionalidades das bibliotecas GD e Imagick para o tratamento de imagens em PHP: como carregar e mostrar uma imagem, como redimensioná-la e como lhe acrescentar texto. Já podes aproveitar estes exemplos de código para integrar estas funcionalidades na tua aplicação PHP. Explora também os outros métodos e opções que as duas bibliotecas propõem, para alargar ainda mais o que consegues fazer com imagens em PHP.

PHP

Damien Flandrin Programador web desde 2010, criador da Gekkode e do Email Impact. Cada artigo é testado num projeto real antes de ser publicado. Contacto
Newsletter

Os novos testes, tutoriais e projetos, por e-mail.

Testes reproduzíveis, código versionado, resultados datados. Nunca spam.