0

Gerando Thumbnail de Imagens com PHP

criado por Richard Lima em 19/05/2002 10:21am
Antes de tudo, vamos aos pré-requisitos: a biblioteca GD é necessária, sua instalação já foi bastante discutida no outro artigo, "Contador de Visitas Gráfico Utilizando GD".

Agora um comentário sobre o resultado do código abaixo; será gerado uma imagem com tamanho determinado pelo usuário, não importa o tamanho da imagem original, podem ser várias com tamanhos diferentes que o resultado sempre terá as dimensões escolhidas, pois o thumbnail será montado dentro desse limite, para sempre termos figuras com o mesmo tamanho e sem deformação, tudo está comentado para um fácil entendimento, e pode ser ampliado para gerar miniaturas a partir de um form ou qualquer outra necessidade. O artigo está aberto para comentários, críticas e sugestões.

Espero que seja útil a alguém...

thumbnail.php
--------------------
<?php
// DEFINE A IMAGEM DA QUAL SERÁ GERADA A MINIATURA
   // Lembrar que essa imagem tem que estar no diretório do script...
   // .. nenhum teste será feito para saber se ela existe
   $imagem = "imagem.jpg"; // Tipo: JPG

// DEFINIR O NOME DO ARQUIVO PARA O THUMBNAIL
   $thumbnail = explode('.', $imagem);
   $thumbnail = $thumbnail[0]."_thumbnail.jpg";

// DEFINIR AS DIMENSÕES PARA O THUMBNAIL
   $x = 120; // Largura
   $y = 120; // Altura

// LÊ A IMAGEM DE ORIGEM
    $img_origem = ImageCreateFromJPEG($imagem);

// PEGA AS DIMENSÕES DA IMAGEM DE ORIGEM
    $origem_x = imagesx($img_origem); // Largura
    $origem_y = imagesy($img_origem); // Altura

// ESCOLHE A LARGURA MAIOR E, BASEADO NELA, GERA A LARGURA MENOR
    if($origem_x > $origem_y) { // Se a largura for maior que a altura
       $final_x = $x; // A largura será a do thumbnail
       $final_y = floor($x * $origem_y / $origem_x); // A altura é calculada
       $f_x = 0; // Colar no x = 0
       $f_y = round(($y / 2) - ($final_y / 2)); // Centralizar a imagem no meio y do thumbnail
    } else { // Se a altura for maior ou igual à largura
       $final_x = floor($y * $origem_x / $origem_y); // Calcula a largura
       $final_y = $y; // A altura será a do thumbnail
       $f_x = round(($x / 2) - ($final_x / 2)); // Centraliza a imagem no meio x do thumbnail
       $f_y = 0; // Colar no y = 0
    }

// CRIA A IMAGEM FINAL PARA O THUMBNAIL
    $img_final = ImageCreate($x,$y);

// COPIA A IMAGEM ORIGINAL PARA DENTRO DO THUMBNAIL
    ImageCopyResized($img_final, $img_origem, $f_x, $f_y, 0, 0, $final_x, $final_y, $origem_x, $origem_y);

// SALVA O THUMBNAIL
    ImageJPEG($img_final, $thumbnail);

// LIBERA A MEMÓRIA
    ImageDestroy($img_origem);
    ImageDestroy($img_final);

?>
<html>
<head>
       <title>THUMBNAIL GERADO: <?=$thumbnail;?></title>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><a href="<?=$imagem;?>"><img src="<?=$thumbnail;?>" alt="Mostrar imagem original!" border="0"></a></td>
    <td>
      <p>
        Imagem original: <?=$imagem." (".$origem_x." x ".$origem_y.")";?><br>
        Imagem redimensionada: <?=" (".$final_x." x ".$final_y.")";?><br>
        Thumbnail gerado: <?=$thumbnail." (".$x." x ".$y.")";?>
      </p>
    </td>
  </tr>
</table>
</body>
</html>

-- signoff..

Comentários:

Mostrando 1 - 10 de 17 comentários
Pessoal, o negocio é o seguinte, o script esta funcionando blz.. porem a imagem criada esta com a qualidade ruim! toda serrilhada! estou usando o ImageCreateTrueColor porem mesmo assim a imagem fica mto ruim! Gostaria de um auxilio para resolver este problema! Abraços!!!!
01/04/2008 5:34pm (~8 anos atrás)

quem tiver problemas com as cores use
$img_final = imagecreatetruecolor($x,$y);

no lugar de: $img_final = ImageCreate($x,$y);

e pra tirar o fundo preto coloque isto depois da declaração da variável $img_final

imagefill($img_final, 0, 0, 0xFFFFFF);

vc pode personalizar o fundo com a cor que quizer é só aplicar o código decimal no mesmo lugar do FFFFFF
12/08/2006 10:44pm (~10 anos atrás)

O thumb está saindo serrilhado... já estou usando o ImageCreateTrueColor, sabe como posso arrumar isso?
28/01/2006 7:08pm (~11 anos atrás)

Alguém poderia me ajudar:
Eu criei uma função que gera os thumbnails, mas eu queria gerar eles em preto e banco. Alguém sabe como?
03/11/2005 5:53am (~11 anos atrás)

Testei o script postado.
Ele não gera o Thumbnail, aparece aquele "x" que não achou a imagem, mas o link funciona corretamente.
Ele aparece o seguinte erro.


Warning: imagejpeg(): Unable to open '001_thumbnail.jpg' for writing in /home/maniaweb/domains/maniashop.com.br/public_html/php/fotos/thumbnail.php on line 41

O que seria?
Alguém poderia me ajudar?
11/09/2005 8:53pm (~11 anos atrás)

Ficou ótimo seu script, eu só fiz uma pequena alteração na hora de criar uma novo nome para o thumbnail, mais ele é quase perfeito.

Minha dúvida?

Quando eu entro com uma imagem que não é JPEG, por exemplo um gif, ele dá pau, como eu faria para esse script ser multi-formato-de-imagem?

Obrigado.
20/05/2005 9:35am (~11 anos atrás)

Olá!

Ninguem até agora respondeu como mudar a cor de fundo a partir do script do off.
Será que é possível alguem explicar como faz isso?
Ae off..vc pode dizer?

Valeu
17/04/2005 3:25pm (~11 anos atrás)

Leonardo disse:
eu soh a parte de salvar o thumbnail no diretório...mas me quebrou um galhão! valeu!
11/02/2005 1:53pm (~12 anos atrás)

tem outro artigo sobre o assunto, com mais algumas firulas em http://phpbrasil.com/articles/article.php/id/563
10/06/2004 8:17am (~12 anos atrás)

Tentei rodar o script mas está dando erro. Tenho instalado a biblioteca GD mas me parece que não está reconhecendo .jpg
O q pode estar acontecendo? Podem me ajudar?
----------------------------------------
Warning: imagecreatefromjpeg(): gd-jpeg: JPEG library reports unrecoverable error: in c:\arquivos de programas\apache group\apache\htdocs\pib\fotos\thumbnail.php on line 16

Warning: imagecreatefromjpeg(): 'casa1.jpg' is not a valid JPEG file in c:\arquivos de programas\apache group\apache\htdocs\pib\fotos\thumbnail.php on line 16
--------------------------------------
19/05/2004 3:41pm (~12 anos atrás)

Novo Comentário:

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