+1

Gerando Thumbnails com GD

criado por BOZO em 14/07/2007 8:49am
Você precisa da Biblioteca GD, e se não tenha a biblioteca instalada, basta baixa-la no site www.boutell.com/gd, baixe o arquivo .zip (ou .tar.gz) e descompacte o conteúdo na sua pasta Apache, no mesmo diretório da pasta htdocs.

Acesse seu arquivo php.ini e procure a linha ;extension=php_gd2.dll. Descomente-a retirando o ";" da frente.

Pronto, agora você tem a Biblioteca GD instalada. Você pode verificar se ela foi instalada corretamente pela configuração do php:

<?php
phpinfo();
?>

Ou com o simples teste abaixo:

<?php
if (function_exists("imagecreate")) {
    echo "Parabéns! A GD está instalada!";
}
?>

Agora que temos a biblioteca instalada, vamos ao script que cria as thumbnails.

Abaixo você vai ver o script já pronto, todas as linhas estão comentadas, para sabermos como ocorre o processo, e o que faz cada função.

<?php
//Primeiro setamos as variáveis

//Tamanho da thumb, um valor inteiro, que corresponde à porcentagem.
$Tamanho = 50;

//Diretório onde estão as imagens
$Fotos = "fotos/";

//Diretório onde serão criadas as Thumbs
$Thumbs = "thumbs/";

//Seta qual tipo de arquivo será usado, no caso Jpg, Gif ou PNG
$Ext = ".jpg";

//Seta a qualidade da Thumb
$Qualidade = 95;

//Vamos abrir o diretório das imagens
$dh = opendir(($dir = "$Fotos"));

//Agora vamos varrer todo o diretório à procura das imagens
while (false !== ($filename = readdir($dh))) {
    //Verificamos se o arquivo é uma imagem de extensão igual á setada em $Ext
    if (strtoupper(substr($filename,-4)) != strtoupper($Ext)) {
        continue;
    }

    //Verificamos aqui com que tipo de imagem vai trabalhar
    if (strtoupper($Ext) == ".JPG") {
        $ExtFunc = "Jpeg";
    } elseif (strtoupper($Ext) == ".GIF") {
        $ExtFunc = "Gif";
    } elseif (strtoupper($Ext) == ".PNG") {
        $ExtFunc = "Png";
    }
    
    //Criamos a imagem apartir da extensão setada em $ExtFunc
    //Concatenamos o valor de $ExtFunc para termos a função que criará a imagem
    //Podendo ser "ImageCreateFromJpeg" , "ImageCreateFromGif" ou "ImageCreateFromPng"
    
    $CriarImagemDe = "ImageCreateFrom" . $ExtFunc;
    $img = $CriarImagemDe($dir . $filename);
    
    //Aqui tiramos a proporção , o tamanho da thumb em relação à imagem

    //Pega largura da imagem
    $he = ImageSX($img);

    //Pega altura da imagem
    $wi = ImageSY($img);

    //Seta valor da largura da thumb
    $x = ($he / 100) * $Tamanho;

    //Seta valor da altura da thumb
    $y = ($wi / 100) * $Tamanho;
        
    //Aqui é criada a nova imagem, a thumb
    $img_nova = imagecreatetruecolor($x,$y); 
    
    //Agora a nova imagem é redimencionada
    imagecopyresampled($img_nova, $img, 0, 0, 0, 0, $x, $y, $he, $wi); 

    //Agora salvamos a Thumb no diretório especificado em $Thumbs, com a qualidade setada em $Qualidade
    //Para salvar a nova imagem, usaremos a função correspondente à extensão 
    //Que pode ser "ImageJpeg" , "ImageGif" ou "ImagePng" , concatenando os valores Image + $ExtFunc
    $Image = "Image" . $ExtFunc;
    $Image($img_nova, $Thumbs . $filename . $Ext, $Qualidade);
    
    //Destruimos o cache da imagem para liberar uma nova thumb
    ImageDestroy($img_nova);
    ImageDestroY($img); 
}

//Pronto todas as thumbnails foram criadas
echo "Thumbnails Geradas com sucesso!";
?>


Pronto, todas as thumbnails foram criadas com ótima qualidade.

O script não conta com nenhuma validação, com verificar se a imagem realmente é uma imagem válida, se existe o diretório onde estão as figuras ou onde serão gravadas as thumbnails, se a extensão é valida, dentre outras que julgo necessárias, ele apenas ilustra o processo de criação das imagens.

Fora isso espero que seja util.

Comentários:

Mostrando 1 - 10 de 14 comentários
BOZO disse:
nunca tive problemas, testei aqui agora e funcionou com PNG.

tentar criar um png qualquer no Paint e ver se cria corretamente, pode ser algum problema com o tipo do png...

verifica ai a versão do GD, pode ser outro problema.
25/02/2008 3:31am (~8 anos atrás)

Roberto Lima disse:
o png criado não tem como ser vizualizado...
parece que cria corrompido....

23/02/2008 6:42am (~8 anos atrás)

BOZO disse:
é, o exemplo mostra como pegar um determinado tipo de imagem, não todas, depois posto um exemplo de como usar para todas...
27/07/2007 4:26am (~9 anos atrás)

Ricardo Gama disse:
Bozo, eu saquei o pq do .gif não estar funcionando. é que a váriável $Ext já ta pré-definida com o .jpg... ae com .gif ele não funcionou. Pq eu troquei a xtensão da várivel pra .gif e ae funfou certinho... como resolver isso... Imagino eu que conseqüentemente a .png tbm não vá funcionar, a não ser que eu troque a $Ext pra png... enfim, se puder da uma luz ae... vlw
26/07/2007 7:55pm (~9 anos atrás)

Ricardo Gama disse:
Bozo, agora que eu vi véio... o lance da extensão duplicada deu certo, não duplica mais... só que agora eu vi outro lance. Imagem com extensão .gif não está funcionando. não sei o pq... mas ele não cria a img pequena... com jpg funciona perfeitamente, mas .gif nao rolou... nem teste .png... o Que será que houve??
26/07/2007 7:14pm (~9 anos atrás)

ao traduzir o erro, quando li direitinho, tinha visto que tinha esquecera de criar a pasta "thumbs".

um ótimo script está me ajudando muito.

parabéns Bozo pelo ótimo tutorial
24/07/2007 8:07am (~9 anos atrás)

mensagem de erro
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'thumbs/15810004.JPG' for writing in C:\xampp\htdocs\www\estudo\fotos\phpdesigner_tmp1.php on line 69

24/07/2007 7:58am (~9 anos atrás)

Ricardo Gama disse:
Paulo, vai ver aconteceu a mesma coisa que aconteceu comigo, e ae eu mudei o chmod da pasta pra 777 e ficou tudo certo... muda ae e ve se vc consegue
23/07/2007 5:06pm (~9 anos atrás)

BOZO disse:
Paulo Mardson

Acredito que isso é pq vc não tem permissão de escrita no diretorio Thumbs, mude a permissão desse diretorio...


Ricardo Augusto Pereira Gama

Não tinha reparado, mas basta retirar a variavel $Ext desta linha

//Troque
$Image($img_nova, $Thumbs . $filename . $Ext, $Qualidade);

//Por
$Image($img_nova, $Thumbs . $filename , $Qualidade);

23/07/2007 4:30am (~9 anos atrás)

Ricardo Gama disse:
Po bozo, eu baixei um monte, mas nenhum funciona do jeito que eu quero, entao estudei os lances dos arrays, e consegui fazer... vlw... se liga cara, eu usei esse seu script pra fazer as thunbs... deu certinho... mas só teve um problema cara... quando ele joga a foto pequena pra pastaque a gente quer,ele joga tranquilo, mas tem o seguinte. Ele joga com uma extensao do arquivo a mais... imagino eu pelo seguinte, a foto ja tem o nome dela. Ex.: foto1.jpg, Quando ele joga pra pasta pra ficar as thunbs ele joga pra lá assim: foto1.jpg.jpg ... Tem como resolver isso??? Vlw
22/07/2007 9:01am (~9 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)