/* 
 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; 
    } 
    // verifica se está executando sob windows ou unix-like, para a
    // aplicação do separador de diretórios correto.
    if (strtoupper(substr(PHP_OS, 0,3) == 'WIN'))
       $barra= "\\";
    else
       $barra= "/";
    // obtém a extensão pelo mime-type
    $ext= getExt($imagem);
    if (!$ext)
    {
       echo "Tipo inválido
";
       exit;
    }
    // separa o nome do arquivo do(s) diretório(s)
    $dir_arq= explode($barra, $imagem);
      
    // 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; // pega o nome do arquivo, sem os diretórios
    $arquivo_miniatura= "thumbs".$barra."mini_".$dir_arq[$i];
      
    // 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); 
} 
// getExt - Verifica o mime-type da imagem e retorna a extensão do arquivo
function getExt($imagem)
{
    // isso é para obter o mime-type da imagem. Se não me engano, só funciona nas
    // versões acima de 4.3.0 do PHP
    $mime= exif_imagetype($imagem);
    if ($mime == IMAGETYPE_JPEG)
    {
       $ext= "jpg";
       return $ext;
    }
    else
    if ($mime == IMAGETYPE_PNG)
    {
       $ext= "png";
       return $ext;
    }
    else
       return false;
}
?>