Nesse post eu havia falado, por cima, sobre a biblioteca GD, que possibilita a manipulação de imagens no PHP.
Uma das funcionalidades mais necessárias no PHP é criar uma thumbnail (miniatura) de uma imagem – e certamente é uma das primeiras coisas que alguém que começa a programar em PHP e precisa fazer com imagens, tem a necessidade.
Segue abaixo a função que eu uso – há anos. Não foi desenvovida por mim, achei ela no Google anos atrás, e sei que ela se popularizou!
<?php
//imagem original
$source_image = "spork.jpg";//altura máxima
$thumb_height = 40;//prefixo da miniatura
$thumb_prefix = "thumb_";//qualidade – vai de 0 a 100
$quality = 100;//checa se imagem existe
if(!file_exists($source_image)) {
echo "Imagem não encontrada";
} else {
//tipos suportados (jpg, png, gif, etc…)
$supported_types = array(1, 2, 3, 7);//retorna informações da imagem
list($width_orig, $height_orig, $image_type) = getimagesize($source_image);//checa se é um tipo suportado
if(!in_array($image_type, $supported_types)) {
echo "Tipo não suportado de imagem: " . $image_type;
}
else
{//nome da imagem
$path_parts = pathinfo($source_image);
$filename = $path_parts["filename"];//calcula as proporções
$aspect_ratio = (float) $width_orig / $height_orig;//calcula a largura da thumb baseada na altura
$thumb_width = round($thumb_height * $aspect_ratio);
//detecta o tipo de arquivo
$source = imagecreatefromstring(file_get_contents($source_image));//cria canvas
$thumb = imagecreatetruecolor($thumb_width, $thumb_height);imagecopyresampled($thumb, $source, 0, 0, 0, 0, $thumb_width, $thumb_height, $width_orig, $height_orig);
//destrói, para liberar memória
imagedestroy($source);
//cria thumb baseada no tipo da imagem
switch ( $image_type )
{
case 1:
imagegif($im, $fileName);
$thumbnail = $thumb_prefix.$filename . ".gif";
break;case 2:
$thumbnail = $thumb_prefix.$filename . ".jpg";
imagejpeg($thumb, $thumbnail, $quality);
break;case 3:
imagepng($im, $fileName);
$thumbnail = $thumb_prefix.$filename . ".png";
break;case 7:
imagewbmp($im, $fileName);
$thumbnail = $thumb_prefix.$filename . ".bmp";
break;
}
}
}
?>