Qualquer pessoa que queira desenvolver uma solução personalizada em php que utilize imagens precisa saber manipular o básico com a lib GD. No primeiro post da série, você vai aprender a rotina mais básica e necessária para se trabalhar com imagens no php: redimensionamento proporcional. Serve para criar thumbnails (miniaturas) e também para limitar os tamanhos das imagens enviadas, já que hoje em dia elas estão com uma resolução cada vez maior, mais pesadas, e é imprescindível redimensioná-las para um tamanho pré-definido antes de armazenar no servidor web.
Vamos usar a imagem abaixo para os exemplos:

Vamos começar com a versão simplificada do script, que faz apenas o redimensionamento para um tamanho fixo, não proporcional. O problema dessa abordagem é que assim as imagens ficam quase sempre distorcidas, a não ser que sejam enviadas já na mesma proporção que você vai usar. Exemplo:
$thumb_w = 100;
$thumb_h = 100;
$img = imagecreatefromjpeg("logan.jpg");
$img_w = imagesx($img);
$img_h = imagesy($img);
$thumb = imagecreatetruecolor($thumb_w,$thumb_h);
imagecopyresized($thumb,$img,0,0,0,0,$thumb_w,$thumb_h,$img_w,$img_h);
header("Content-type: image/jpeg");
imagejpeg($thumb);
A imagem utilizada (logan.jpg) mede 720x540, e queremos redimensionar para um tamanho que não é proporcional às suas medidas originais: 100x100 (quadrado). O resultado é a imagem abaixo:

Como vocês podem notar, está desproporcional. Agora precisamos fazer um cálculo, usando regra de três, para gerar um thumbnail que continue mantendo a proporção original, mas sem ultrapassar as medidas máximas (100x100).
$larguraMax = 100;
$alturaMax = 100;
$source = "logan.jpg";
$tamanho = getimagesize($source);
$largura = $tamanho[0];
$altura = $tamanho[1];
if($largura > $larguraMax)
{
$largura = $larguraMax;
$altura = ($largura * $tamanho[1]) / $tamanho[0];
}
if($altura > $alturaMax)
{
$altura = $alturaMax;
$largura = ($tamanho[0] * $altura) / $tamanho[1];
if($largura > $larguraMax)
{
$largura = $larguraMax;
$altura = ($largura * $tamanho[1]) / $tamanho[0];
}
}
//especifico para jpg
$img = imagecreatefromjpeg($source);
$thumb = imagecreatetruecolor($largura,$altura);
imagecopyresized($thumb,$img,0,0,0,0,$largura,$altura,$tamanho[0],$tamanho[1]);
header("Content-type: image/jpeg");
imagejpeg($thumb);
Agora, conseguimos um thumbnail proporcional, que não ultrapassa as medidas máximas estabelecidas. O resultado é a imagem abaixo:

Apesar de estar funcionando corretamente, do jeito que o script se encontra funcionará apenas para imagens no formato jpg. A versão abaixo, mais completa, detecta o tipo de imagem pela extensão do arquivo e gera corretamente o thumbnail para imagens jpg, png e gif.
$larguraMax = 100;
$alturaMax = 100;
$source = "logan.jpg";
$tamanho = getimagesize($source);
$largura = $tamanho[0];
$altura = $tamanho[1];
if($largura > $larguraMax)
{
$largura = $larguraMax;
$altura = ($largura * $tamanho[1]) / $tamanho[0];
}
if($altura > $alturaMax)
{
$altura = $alturaMax;
$largura = ($tamanho[0] * $altura) / $tamanho[1];
if($largura > $larguraMax)
{
$largura = $larguraMax;
$altura = ($largura * $tamanho[1]) / $tamanho[0];
}
}
header("Content-type: image/jpeg");
$ext = array_pop(explode(".",basename($source)));
switch(strtolower($ext))
{
case "png":
$fp = imagecreatefrompng($source);
$thumb = imagecreatetruecolor($largura,$altura);
imagecopyresampled($thumb,$fp,0,0,0,0,$largura,$altura,$tamanho[0],$tamanho[1]);
imagepng($thumb);
break;
case "gif":
$fp = imagecreatefromgif($source);
$thumb = imagecreatetruecolor($largura,$altura);
imagecopyresampled($thumb,$fp,0,0,0,0,$largura,$altura,$tamanho[0],$tamanho[1]);
imagegif($thumb);
break;
default:
$fp = imagecreatefromjpeg($source);
$thumb = imagecreatetruecolor($largura,$altura);
imagecopyresampled($thumb,$fp,0,0,0,0,$largura,$altura,$tamanho[0],$tamanho[1]);
imagejpeg($thumb);
break;
}









![=] feliz natal...](http://24.media.tumblr.com/tumblr_lwfpzup6LO1r7n34ro1_75sq.jpg)

