Gerador de Thumbnails

Publicado por Rogério Bragil 10/11/2004

[ Hits: 17.259 ]

Homepage: http://www.bragil.net

Download thumb.zip




Esse gerador de thumbnails gera miniaturas de mesmo tamanho, não importando se a imagem original é grande ou pequena. Ele faz um cálculo de aproximação,  de modo que as imagem sejam reduzidas de forma homogênea sem ficarem com o aspecto achatado. Ideal para fotologs. Deve existir um diretório com o nome de "thumbs", no mesmo caminho do script , com permissão de escrita.

  



Esconder código-fonte

<?
/*
thumbMaker - versão 0.4 - 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 "<center><h3>Imagem não encontrada.</h3></center>";
        return false;
    }

    // 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 "<center><h3>Tipo inválido</h3></center>";
       return false;
    }
    // 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);
    
    return true;
}

// 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. 
    $mime= getimagesize($imagem);

    if ($mime[2] == 2)
    {
       $ext= "jpg";
       return $ext;
    }
    else
    if ($mime[2] == 3)
    {
       $ext= "png";
       return $ext;
    }
    else
       return false;
}

?> 

Scripts recomendados

Cliente RSS com MegpieRSS

Paginação de dados em PDO

tableConstructor

Retornar o último dia do Mês

Calendário em php


  

Comentários
[1] Comentário enviado por bragil em 10/11/2004 - 21:34h

OBS: Este gerador de thumbnails trabalha somente com JPG e PNG.

bragil

[2] Comentário enviado por redstyle em 19/11/2004 - 12:57h

Como é o uso da função?
Da um exemplo.
Valeu ae muito bom o script.

[3] Comentário enviado por bragil em 19/11/2004 - 13:03h

É simples...

// Esse 150 aí é o tamanho em pixels que a imagem será reduzida, sem
// ficar com o aspecto de achatada. Experimente outros valores.
$sucesso= thumbMaker("fotos/teste.jpg", 150);

// se ocorreu algum erro...
if (!$sucesso)
{
echo "Erro ao gerar thumbnail";
exit;
}
else
{
// exibe o thumnail gerado
echo "<img src='thumbs/mini_teste.jpg'>";
}


Falow!

bragil

[4] Comentário enviado por bragil em 19/11/2004 - 13:05h

Lembrando que deve existir o diretório thumbs com permissão de escrita, que será onde o thumb será armazenado.

[5] Comentário enviado por alexlibrelon em 03/07/2006 - 11:14h

Bom dia!
Muito bacana o script mas, desculpe a ignorância...
como faço para criar os thumbs de uma pasta com 700 imagens .jpg, terei que fazer uma a uma??

Abraços!

Alex

[6] Comentário enviado por RodrigoKulb em 11/07/2009 - 19:26h

Criei um site que gera thumbs dos sites cadastrados utilizei PHP, MySQL FTP e ShellScript.

http://1link.com.br

vou criar o Artigo de como faz e posto aqui


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts