Trabalho com imagens em PHP: bibliotecas GD e Imagick
O processamento de imagens é uma das tarefas essenciais do desenvolvimento web. Em PHP, duas bibliotecas principais são usadas para isso: GD (integrada) e Imagick (um wrapper sobre o ImageMagick). Neste artigo, exploraremos suas capacidades, aprenderemos a redimensionar, cortar, aplicar marcas d'água e otimizar imagens.
1. Biblioteca GD
GD é uma extensão padrão do PHP, disponível na maioria das hospedagens. Ela permite criar, modificar e salvar imagens nos formatos JPEG, PNG, GIF, WebP.
Carregamento e verificação:
<?php// Verificamos se a extensão GD está instaladaif (extension_loaded('gd') && function_exists('gd_info')) { echo "GD está instalada: "; print_r(gd_info());} else { echo "GD não encontrada";}?>1.1 Redimensionamento de imagem (resize)
O cenário mais comum é reduzir a imagem para o tamanho desejado, mantendo as proporções.
<?phpfunction resizeImage($sourcePath, $destPath, $newWidth, $newHeight) { // Obtemos as dimensões da imagem original list($width, $height, $type) = getimagesize($sourcePath); // Criamos um recurso a partir do arquivo original switch ($type) { case IMAGETYPE_JPEG: $source = imagecreatefromjpeg($sourcePath); break; case IMAGETYPE_PNG: $source = imagecreatefrompng($sourcePath); break; case IMAGETYPE_GIF: $source = imagecreatefromgif($sourcePath); break; default: return false; } // Criamos uma nova imagem $newImage = imagecreatetruecolor($newWidth, $newHeight); // Mantemos a transparência para PNG/GIF imagealphablending($newImage, false); imagesavealpha($newImage, true); // Copiamos e redimensionamos imagecopyresampled($newImage, $source, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height); // Salvamos o resultado imagejpeg($newImage, $destPath, 85); // Qualidade 85% // Liberamos a memória imagedestroy($source); imagedestroy($newImage); return true;}
// Exemplo de usoresizeImage('photo.jpg', 'photo_thumb.jpg', 300, 200);?>1.2 Corte de imagem (crop)
O corte permite extrair a parte central da imagem no tamanho desejado.
<?phpfunction cropCenter($sourcePath, $destPath, $cropWidth, $cropHeight) { list($width, $height) = getimagesize($sourcePath); $source = imagecreatefromjpeg($sourcePath); // Calculamos as coordenadas do centro $x = ($width - $cropWidth) / 2; $y = ($height - $cropHeight) / 2; $newImage = imagecreatetruecolor($cropWidth, $cropHeight); imagecopyresampled($newImage, $source, 0, 0, $x, $y, $cropWidth, $cropHeight, $cropWidth, $cropHeight); imagejpeg($newImage, $destPath, 90); imagedestroy($source); imagedestroy($newImage);}
cropCenter('photo.jpg', 'photo_cropped.jpg', 400, 400);?>1.3 Aplicação de marca d'água
Adicionar texto ou logotipo sobre a imagem.
<?phpfunction addWatermarkText($sourcePath, $destPath, $text = "© PythonLib.ru") { $source = imagecreatefromjpeg($sourcePath); $width = imagesx($source); $height = imagesy($source); // Cor do texto (branco com transparência) $color = imagecolorallocatealpha($source, 255, 255, 255, 50); // Tamanho da fonte (usamos a fonte integrada) $fontSize = 5; $x = 10; $y = $height - 20; imagestring($source, $fontSize, $x, $y, $text, $color); imagejpeg($source, $destPath, 90); imagedestroy($source);}
addWatermarkText('photo.jpg', 'photo_watermarked.jpg');?>2. Biblioteca Imagi
Também na biblioteca
Validação de dados em PHP: guia e ferramentas
Matchers do Catch2 para C++: guia completo com exemplos práticos
CameraX para Kotlin: guia completo com exemplos práticos
Filas de Tarefas em Java: Visão Geral e Implementação com java.util.concurrent