Blog ComercialWeb - São Paulo - SP
E-mail: [email protected]
Atualizado: 11/10/2025

Como cortar e redimensionar imagens em PHP com GD e Imagick

Crop e redimensionamento de imagens em PHP

Neste guia, você fará crop (corte) e redimensionamento em PHP de forma segura e previsível, usando as bibliotecas GD (nativa na maioria das hospedagens) e Imagick (ImageMagick). Também veremos como tratar a orientação EXIF e gerar thumbnails.

Função GD: redimensiona mantendo proporção (cover) e corta o excedente

<?php // Redimensiona para caber em $w x $h (modo COVER) e corta o excedente centralmente.
function gd_cover_crop($srcPath, $destPath, $w, $h, $quality = 85) {
// 1) Detecta tipo e cria imagem a partir do arquivo (JPEG/PNG/GIF).
$info = getimagesize($srcPath); if ($info === false) { return false; }
$mime = $info["mime"];
switch ($mime) {
case 'image/jpeg': $src = imagecreatefromjpeg($srcPath); break;
case 'image/png': $src = imagecreatefrompng($srcPath); break;
case 'image/gif': $src = imagecreatefromgif($srcPath); break;
default: return false;
}
// 2) Dimensões originais.
$ow = imagesx($src); $oh = imagesy($src);
// 3) Calcula escala para cobrir (cover) mantendo proporção.
$scale = max($w/$ow, $h/$oh);
$nw = (int)($ow*$scale); $nh = (int)($oh*$scale);
// 4) Centraliza corte no destino.
$dx = (int)(($w - $nw)/2); $dy = (int)(($h - $nh)/2);
// 5) Cria canvas destino e preserva transparência se PNG.
$dst = imagecreatetruecolor($w, $h);
if ($mime === 'image/png') {
imagealphablending($dst, false); imagesavealpha($dst, true);
} // 6) Redimensiona para o destino (com corte implícito pelas bordas negativas).
imagecopyresampled($dst, $src, $dx, $dy, 0, 0, $nw, $nh, $ow, $oh);
// 7) Salva conforme o tipo de origem (poderia forçar JPG/PNG se desejar).
if ($mime === 'image/jpeg') { imagejpeg($dst, $destPath, $quality); } elseif ($mime === 'image/png') { imagepng($dst, $destPath); } elseif ($mime === 'image/gif') { imagegif($dst, $destPath); } imagedestroy($src); imagedestroy($dst); return true; }

Use quando quiser um banner 16:9, thumb quadrada 1:1, etc. O cálculo centraliza e corta as sobras mantendo a composição equilibrada.

Tratando orientação EXIF (fotos de celular) antes do crop

<?php // Corrige rotação com base no EXIF (apenas JPEG).
function fix_exif_orientation($path) {
if (!function_exists('exif_read_data')) { return; }
$exif = @exif_read_data($path); if (!$exif || empty($exif['Orientation'])) { return; }
$img = imagecreatefromjpeg($path); if (!$img) { return; }
switch ($exif['Orientation']) {
case 3: $img = imagerotate($img, 180, 0); break;
case 6: $img = imagerotate($img, -90, 0); break;
case 8: $img = imagerotate($img, 90, 0); break; }
imagejpeg($img, $path, 90); imagedestroy($img); }

Chame fix_exif_orientation() logo após o upload do JPEG, antes de aplicar o corte para garantir que a geometria esteja correta.

Imagick: crop + thumbnail com poucas linhas

<?php if (class_exists('Imagick')) {
$img = new Imagick('foto.jpg');
// thumb 400x400 (crop center)
$img->cropThumbnailImage(400, 400);
$img->setImageCompressionQuality(85);
$img->writeImage('thumb.jpg');
}

Se sua hospedagem tiver Imagick, aproveite métodos prontos e desempenho superior em alguns cenários.

Perguntas frequentes

GD ou Imagick — qual usar?
GD atende a maioria dos casos e já vem em muitas hospedagens. Imagick oferece mais recursos e performance em operações complexas.
Como tratar orientação EXIF?
Rode uma correção de EXIF (para JPEG) imediatamente após o upload, antes do redimensionamento/corte.
Como manter transparência em PNG?
Use imagealphablending(false) e imagesavealpha(true) no GD; exporte como PNG.
Como escolher a qualidade do JPEG?
Entre 80–90 costuma equilibrar tamanho e nitidez. Teste em telas/formatos reais.
Fonte: Redação

Veja um modelo pronto funcionando


Mais Lidos

Ferramentas úteis

Precisa gerar senhas, validar CPF/CNPJ ou criar QR Code? Acesse nossos Geradores e Validadores Online.