Gerando Thumbnail de Imagens com PHP
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
--------------------
-- signoff..
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..
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
(~16 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
$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
(~18 anos atrás)
O thumb está saindo serrilhado... já estou usando o ImageCreateTrueColor, sabe como posso arrumar isso?
28/01/2006 7:08pm
(~19 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?
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
(~19 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?
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
(~19 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.
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
(~19 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
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
(~19 anos atrás)
eu soh a parte de salvar o thumbnail no diretório...mas me quebrou um galhão! valeu!
11/02/2005 1:53pm
(~20 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
(~20 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
--------------------------------------
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
(~20 anos atrás)