<? 
/* 
thumbMaker - vers�o 0.1 - Por Rog�rio Bragil - www.bragil.org - Este script cria um thumbnail de uma imagem atrav�s de um c�lculo de aproxima��o. Voc� pode criar miniaturas de imagens de diferentes tamanhos que o resultado ser� uma cole��o de thumbnails de dimens�es parecidas. Ideal para albuns de fotos, onde basta voc� fazer o upload da imagem e deixar o script gerar o thumbnail. OBS: trabalha com jpg e png somente. O thumbnail ser� gerado no diret�rio thumbs, portanto voc� deve criar esse diret�rio previamente, com permiss�o de escrita. 

  e-mail: rogerio@bragil.org - Qualquer sugest�o, d�vida ou cr�tica ser�o bem aceitos! 

o par�metro aprox � o tamanho que voc� quer aproximar (por exemplo, voc� quer reduzir uma imagem 1024x768 pixels para aproximadamente 200x200 pixels, mas como a imagem original n�o � exatamente quadrada, � feito um c�lculo, onde esta imagem reduzir� para, mais ou menos, 200x150 pixels, para n�o ficar com o aspecto "achatada"). 
*/ 

function thumbMaker($imagem, $aprox) 
{ 
    if (!file_exists($imagem)) 
    { 
        echo "Imagem n�o encontrada."; 
        exit; 
    } 
     
    // isso ir� separar a extens�o do nome do arquivo. 
    $arquivo_miniatura= explode('.', $imagem); 
     
    // obt�m somente a extens�o do arquivo, convertendo para min�sculo. 
    $ext= strtolower($arquivo_miniatura[1]); 
     
    // separa o nome do arquivo do(s) diret�rio(s) 
    $dir_arq= explode("/", $arquivo_miniatura[0]); 
     
    // monta o nome do arquivo a ser gerado (thumbnail). O sizeof abaixo obt�m o n�mero de itens         // no array, dessa forma podemos pegar somente o nome do arquivo, n�o importando em que     // diret�rio est�. 
    $i= sizeof($dir_arq) - 1; 
    $arquivo_miniatura= "thumbs"."/mini_".$dir_arq[$i].".".$arquivo_miniatura[1]; 
     
    // imagem de origem 
    if ($ext == "png") 
        $img_origem= imagecreatefrompng($imagem); 
    elseif ($ext == "jpg") 
        $img_origem= imagecreatefromjpeg($imagem); 
     
    // obt�m as dimens�es da imagem original 
    $origem_x= ImagesX($img_origem); 
    $origem_y= ImagesY($img_origem); 
     
    $x= $origem_x; 
    $y= $origem_y; 
     
    // Aqui � feito um c�lculo para aproximar o tamanho da imagem ao valor passado em $aprox. 
    // N�o importa se a foto for grande ou pequena, o thumb de todas elas ser� mais ou menos do 
    // mesmo tamanho. 
    if ($x >= $y) 
    { 
        if ($x > $aprox) 
        {     
            $x1= (int)($x * ($aprox/$x));   
            $y1= (int)($y * ($aprox/$x)); 
        } 
        // incluido o else abaixo. Caso a imagem seja menor do que
        // deve ser aproximado, mant�m tamanho original para o thumb.
        else
        {
            $x1= $x;
            $y1= $y;
        }
    } 
    else 
    { 
        if ($y > $aprox) 
        { 
            $x1= (int)($x * ($aprox/$y)); 
            $y1= (int)($y * ($aprox/$y)); 
        }
        // incluido o else abaixo. Caso a imagem seja menor do que
        // deve ser aproximado, mant�m tamanho original para o thumb.
        else
        {
            $x1= $x;
            $y1= $y;
        } 
    } 
    $x= $x1; 
    $y= $y1; 

    // cria a imagem do thumbnail 
    $img_final = ImageCreateTrueColor($x, $y); 
    ImageCopyResampled($img_final, $img_origem, 0, 0, 0, 0, $x+1, $y+1, $origem_x, $origem_y); 
     
    // o arquivo � gravado 
    if ($ext == "png") 
        imagepng($img_final, $arquivo_miniatura); 
    elseif ($ext == "jpg") 
        imagejpeg($img_final, $arquivo_miniatura); 
     
    // a mem�ria usada para tudo isso � liberada. 
    ImageDestroy($img_origem); 
    ImageDestroy($img_final); 
} 

?>