Trabalho com imagens em PHP: redimensionamento e corte (resize, crop)
O processamento de imagens é uma das tarefas mais comuns no desenvolvimento de aplicações web. Upload de avatares, criação de miniaturas, adaptação de imagens para diferentes resoluções de tela — tudo isso requer redimensionamento (resize) e corte (crop). Em PHP, existem duas ferramentas principais para esses fins: a extensão nativa GD e a biblioteca mais poderosa Imagick. Neste artigo, abordaremos ambas as abordagens com exemplos práticos.
1. Extensão GD (ferramenta padrão)
GD é a extensão mais popular e acessível para trabalhar com imagens. Ela está incluída na maioria das distribuições PHP e não requer instalação adicional. O GD suporta os formatos principais: JPEG, PNG, GIF, WebP.
1.1. Redimensionamento (resize) mantendo as proporções
A tarefa clássica é reduzir uma imagem grande para uma largura definida, mantendo a proporção. Abaixo está um exemplo de função que redimensiona a imagem para a largura especificada.
<?phpfunction resizeImage($srcFile, $destFile, $newWidth) { // Obtém informações da imagem original list($width, $height, $type) = getimagesize($srcFile);
// Calcula a nova altura proporcionalmente $ratio = $width / $height; $newHeight = $newWidth / $ratio;
// Cria uma tela para a nova imagem $srcImage = imagecreatefromjpeg($srcFile); // para JPEG $destImage = imagecreatetruecolor($newWidth, $newHeight);
// Copia e redimensiona imagecopyresampled($destImage, $srcImage, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
// Salva o resultado imagejpeg($destImage, $destFile, 90); // qualidade 90%
// Limpa a memória imagedestroy($srcImage); imagedestroy($destImage);}
// Exemplo de usoresizeImage('photo.jpg', 'photo_thumb.jpg', 300);?>Para trabalhar com PNG ou GIF, é necessário usar as funções imagecreatefrompng() e imagecreatefromgif(), e salvar através de imagepng() ou imagegif().
1.2. Corte de imagem (crop) centralizado
Frequentemente, é necessário não apenas reduzir, mas recortar uma área quadrada do centro da imagem. Isso é chamado de crop centralizado.
<?phpfunction cropCenter($srcFile, $destFile, $cropSize) { list($width, $height, $type) = getimagesize($srcFile);
// Determina as coordenadas para recortar o quadrado do centro $srcX = ($width - $cropSize) / 2; $srcY = ($height - $cropSize) / 2;
// Se a imagem for menor que o tamanho necessário, apenas redimensiona if ($width < $cropSize || $height < $cropSize) { $ratio = min($cropSize / $width, $cropSize / $height); $newWidth = $width * $ratio; $newHeight = $height * $ratio; $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); // Preenche com fundo branco $white = imagecolorallocate($destImage, 255, 255, 255); imagefill($destImage, 0, 0, $white); // Copia com centralização imagecopyresampled($destImage, $srcImage, ($cropSize - $newWidth) / 2, ($cropSize - $newHeight) / 2, 0, 0, $newWidth, $newHeight, $width, $height); } else { $srcImage = imagecreatefromjpeg($srcFile); $destImage = imagecreatetruecolor($cropSize, $cropSize); imagecopyresampled($destImage, $srcImage, 0, 0, $srcX, $srcY, $cropSize, $cropSize, $cropSize, $cropSize); }
imagejpeg($destImage, $destFile, 90); imagedestroy($srcImage); imagedestroy($destImage);}
// Exemplo: quadrado 200x200 do centrocropCenter('photo.jpg', 'photo_cropped.jpg', 200);?>2. Biblioteca Imagick (ferramenta avançada)
Imagick é um wrapper PHP para a poderosa ferramenta ImageMagick. Ela pré
Também na biblioteca
Trabalho com ZIP/arquivos em Kotlin: criação, leitura e descompactação
Trabalhando com XML em Rust: bibliotecas quick-xml, roxmltree e serde_xml_rs
Geolocalização e Mapas em Java: Bibliotecas, APIs e Exemplos de Código