Como gerar thumbs de imagens em php

Em diversos momentos, prescisamos realizar o redimencionamento de fotos em nossas aplicações WEB.

Abaixo segue um exemplo de upload de arquivo para o servidor usando nossa presciosa função do php o move_upload_file.

E uma pequena função que recebe uma imagem e gera outra, com a nova largura especificada, a altura é automaticamente calculada para manter a proporçãoem relação à imagem original. A imagem é redimensionada mantendo-se a qualidade de 100% (válido especialmente para o formato JPEG).

Qualquer duvida é so postar galera. Abraços e até mais…

1º Passo: Bem aqui é o nosso arquivo que será responsavel pela criação do nosso thumb.

Arquivo: functionThumb.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
<?php
 
function geraThumb($photo, $output, $new_width)
{
    $source = imagecreatefromstring(file_get_contents($photo));
    list($width, $height) = getimagesize($photo);
    if ($width>$new_width)
    {
        $new_height = ($new_width/$width) * $height;
        $thumb = imagecreatetruecolor($new_width, $new_height);
        imagecopyresampled($thumb, $source, 0, 0, 0, 0,
            $new_width, $new_height, $width, $height);
        imagejpeg($thumb, $output, 100);
    }
    else
    {
        copy($photo, $output);
    }
}
 
?>

2º Passo: Aqui criaremos um simples formulário html para envio da nossa foto.

Arquivo: formulario.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
<form method="post" action="salva_foto.php" enctype="multipart/form-data" >
 
<div align="center">
<table width="700" border="0" bgcolor="#f1f1f1">
  <tr>
    <td colspan="2"></td>
  </tr>
    <tr>
    <td colspan="2"><br></td>
  </tr>
  <tr>
    <td width="131">Arquivo:</td>
    <td width="298"><input type="file" name="arquivo" class="txt"></td>
  </tr>
  <tr>
    <td width="131">&nbsp;</td>
    <td width="298"><input type="submit" value="enviar" class="btn"></td>
  </tr>
  <tr>
    <td width="131">&nbsp;</td>
    <td width="298">&nbsp;</td>
  </tr>
</table>
<input type="hidden" name="e" value="1">
</form>

3º parte: Realizo o upload do arquivo, e salvo os dados da foto e seu thumb em nossa base de dados.

Arquivo: salva_foto.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
<?php
 
require("connect.php");										//incluo o arquivo de conexão no banco
require("functionThumb.php");								//incluo o função do thumb	
 
			if(!empty($_FILES['arquivo']['name'])){				//Se existir arquivo para Upload eu faço o mesmo
 
				$ext =explode(".", $_FILES['arquivo']['name']);
				$nome= mktime().mt_rand(1,100).".".$ext[1];		//Pego a extenção do arquivo
 
				move_uploaded_file($_FILES['arquivoPDF']['tmp_name'],"arquivos/$nome");
 
			}else{ $nome= null; }
 
 
 
 
 
$nomeThumb="thumb".mktime().mt_rand(1,100).".".$ext[1]."";		//Passo o nome do novo Thumb
$tamanho=200;										//O tamanho da foto		
$foto="arquivos/".$nome;								//o caminho da foto e seu nome
 
geraThumb($foto, nomeThumb, $tamanho);					//chamo a função passando os parametros
 
 
 
		mysql_query("INSERT INTO fotos ( foto, thumb ) VALUES ( '".$nome."', '".$nomeThumb."'  )");		//Insiro os dados no nosso banco de dados
 
 
?>

7 Responses to “Como gerar thumbs de imagens em php”

  1. Webcrazy  on março 15th, 2009

    Cara 10 este POST, com certeza será de muita utilidade para uso de minhas novas aplicações. Continue postando assim amigo.

  2. christian  on março 15th, 2009

    mto bom o topico… estava precisando disso mesmo valeuuu

  3. Roberto  on maio 31st, 2009

    Cara otimo artigo, muito boa esta função

  4. leandro  on fevereiro 26th, 2010

    Olá amigo, consegui executar o arquivo, mas ele não salvou na pasta o thumb gerado, só a foto orginal, poderia me ajudar?

    valeu abraço!

  5. leandro  on fevereiro 26th, 2010

    Opa, consegui, lindo script, falta de atenção minha. valeu! abraço!

  6. Andre.zip  on março 8th, 2010

    A dica seria, você informar no nome do thumb o caminho desejado para a foto exemplo ( $thumb = ‘fotos/$nome’; )
    Abração

  7. leandro  on abril 9th, 2010

    perfeito, muito obrigado André. Abraço!


Seu Comentário