Página Inicial > Php + Mysql > Criar thumb (miniaturas) com PHP

Criar thumb (miniaturas) com PHP

Olá, vamos ver como gerar miniaturas de imagens (thumb) para uma galeria de fotos, apresentação de produtos ou qualquer outra aplicação. É muito comum encontrarmos sites que exibem miniaturas de imagens ainda da forma antiga, que trata-se de simplesmente redimensionar a imagem com algum software e criar uma pasta chamada thumbs ou miniaturas, muitos aplicativos utilizam essa solução, mas se você pensar em alguma solução mais inteligente que dispense o trabalho do webdesigner por ex. um cms (gerenciador de conteúdo) fica difícil utilizar essa antiga solução, imagine vender ao seu cliente um sistema onde ele possa gerenciar seu conteúdo sem precisar de você, agora imagine que ele queira colocar miniaturas de fotos no site….dai complicou um pouco não é ? ele terá que enviar todas as imagens para você redimensionar e envia-las de volta para ele poder inserir no site, isso não parece ser um sistema com gerenciador de conteúdo, vamos tomar como exemplo um sistema para imobiliárias onde o proprietário cadastra os imóveis e envias as fotos para o site, agora tente imaginar a página principal com os imóveis em destaque……..estranho né, imagine um anúncio com uma foto 800×600 na página principal…agora imagine 20 anúncios como esse, eu acho que fica feio e você? Também não é, então vamos ver como mostrar a miniatura da foto original enviada para o sistema, acredite isso é muito simples!

Em 1º lugar verifique se o seu php está com a biblioteca gd ou gd2 instalada, se não estiver baixe o easyphp, instale e marque a opção gd2 em php extensions, alias o easyphp é maravilhoso, ele já instala o apache, php5 e mysql, se você não conhece está perdendo tempo, falarei sobre ele em um outro post.

Vamos ao arquivo index.php

<html>
<head>
<title>.: Thumbs :.</title>
</style>
</head>
<body>
<img src=”thumb.php?img=image1.jpg” title=”imóvel cod 01″>
<img src=”thumb.php?img=image2.jpg” title=”imóvel cod 02″>
</body>
</html>

Note que acima no src estamos passando a url da imagem para para o arquivo thumb.php, ao invés de passar diretamente a imagem, isso porque o arquivo thumb.php está encarregado de redimensionar a imagem original, mas esse redimensionamento ocorre somente na visualização, ele não altera propriamente a imagem, ela continua no seu tamanho original, apenas o que é mostrado é que foi redimensionado, isso tem que ficar claro, nenhuma imagem pequena é gerada, esse é o truque, o arquivo thumb.php apenas muda as propriedades da imagem para a visualização ok ?

Claro que nesse exemplo eu utilizei uma url pré-definida, mas para o caso de um sistema essa url deveria ser retornada por ex. de uma consulta SQL, no sisteminha (veja aqui um caso real e e aqui o sisteminha) que fiz a algum tempo atrás eu criei uma tabela mais ou menos assim: codimovel_f , urlFoto, descFoto … onde no momento do upload da foto era feita uma inserção no banco de dados contendo a url da foto que acabara de ser enviada, para não repetir os nomes das imagens e eu não ter que ficar renomeando eu utilizei a função MD5() do PHP que gera um nome/string único, em um artigo posterior falarei sobre o MD5.

Vamos ver o tal arquivo chamado thumb.php

<?php
// recebendo a url da imagem
$filename = $_GET['img'];

// Cabeçalho que ira definir a saida da pagina
header(’Content-type: image/jpeg’);

// pegando as dimensoes reais da imagem, largura e altura
list($width, $height) = getimagesize($filename);

//setando a largura da miniatura
$new_width = 120;
//setando a altura da miniatura
$new_height = 100;

//gerando a a miniatura da imagem
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

//o 3º argumento é a qualidade da miniatura de 0 a 100
imagejpeg($image_p, null, 50);
imagedestroy($image_p);
?>

  1. 25, março, 2009 em 09:48 | #1

    cara. muito bom . parabens . rápido e fácil , e o melhor . sem enrolação . valeu mesmo.

  2. 21, abril, 2010 em 03:57 | #2

    Coloquei sua matéria nos meus favoritos e estou aguardando novidades!

  1. Nenhum trackback ainda.