+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 (~17 anos atrás)

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

23/02/2008 6:42am (~17 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 (~17 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 (~17 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 (~17 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 (~17 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 (~17 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 (~17 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 (~17 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 (~17 anos atrás)

Novo Comentário:

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