Gerador de Thumbnail (miniatura)

Publicado por Bruno Casella 03/06/2009

[ Hits: 10.148 ]

Download miniatura.php




Uma função que fiz um tempo atrás, com base no livro "PHP para quem sabe PHP". Ela
gera thumbnails (miniaturas) da imagem que você desejar, e retorna o caminho da
imagem gerada.

Está toda comentada, parte em inglês também. Você vai ter que incluir o arquivo
miniatura.php no topo de seu código, então use conforme explicado nos comentários. Ela
está sobre licença GNU. ;)

  



Esconder código-fonte

<?php

/*

 *      miniatura.php

 *      

 *      Copyleft 2006 Bruno Casella <brunocasella@gmail.com>

 *      

 *      This program is free software; you can redistribute it and/or modify

 *      it under the terms of the GNU General Public License as published by

 *      the Free Software Foundation; either version 2 of the License, or

 *      (at your option) any later version.

 *      

 *      This program is distributed in the hope that it will be useful,

 *      but WITHOUT ANY WARRANTY; without even the implied warranty of

 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

 *      GNU General Public License for more details.

 *      

 *      You should have received a copy of the GNU General Public License

 *      along with this program; if not, write to the Free Software

 *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,

 *      MA 02110-1301, USA.

 */

?>

<!--

/************************************************************************************************

 Função thumbnail criada por Bruno Casella(brunocasella@gmail.com                                 ,*

 baseada em exemplo do livro 'PHP para quem conhece PHP'                                            *

 com varias implementaçãoes                                                                     *

 (sinta-se a vontade para utiliza-lá e implementá-lá, apenas peço que me mande um email         *

 com a atualição da função)                                                                    *

*************************************************************************************************/

/************************************************************************************************

 Function thumbnail made by Bruno Casella(brunocasella@gmail.com/bruno.casella@smartis.com.br), *

 the base of this is a book ('PHP para quem conhece PHP')                                   *

 and here have a lot of implementensions by myself.                                             *

 (Fell free to ute this and develop the function. I just ask to mail me the actualized          *

 function                                                                     *

*************************************************************************************************/

/*Function is comented mainly in portuguese, that is my own language, and secundary in english, a global language . . .

-->

<?

function calcula_altura($x_img, $y_img, $x_novo)

{

   $y_novo=($x_novo*$y_img)/$x_img;

   return($y_novo);

}

function calcula_largura($x_img, $y_img, $y_novo)

{

   $x_novo=($y_novo*$y_img)/$x_img;

   return($x_novo);

}



function miniatura($imagem, $caminho_origem, $caminho_tumb, $tamanho_fixo="", $largura_fixa="", $altura_fixa="", $porcentagem="", $nome_final="")

{

/*$imagem--> o nome da imagem, apenas, que devera ser mandado

$tamanho_fixo--> se será ou não tamanho fixo - se 'S', as variaveis largura_fixa e altura_fixa serão usadas, se 'N' será calculado o tamanho através da porcentagem, que deverá ser mandada

$largura_fixa--> é a largura que será usada na img final(somente se $tamanho_fixo="S")

$altura_fixa--> é a altura que será usada na img final(somente se $tamanho_fixo="S")

--se $largura_fixa=0 e $altura_fixa=0, irá calcular uma img com uma largura definida aqui(por default 50px) e altura calculada por função

$porcentagem--> é a porcentagem que será usada no redimensionamento da img final(somente se $tamanho_fixo="N" ou "")

$nome_final-->o que será acrescentado depois do thumb e antes do nome da img, para poder haver diferenciação entre thumbnails criados da msm img (ex: podera ser criado um thumb_img.jpg e um thumb2_img.jpg da msm img, mas c/ tamanho diferentes

*/

//ah, sim, não se esqueça de que para mandar o argumento $nome final, voce deve mandar todos os anteriores, caso contrario nao dara certo...



/*english comented*/

/*$imagem--> the name of the image, only, tha have to be send

$caminho_origem--> where is the img from. ig: "images/"

$caminho_tumb-->where the thumb is thumb is going to be created. ig: "images/the_thumb_folder/"

/*OBS: the folders of 'where' e 'to' of the img have to have the / on the final of the string, or you'll have a error*//*

$tamanho_fixo--> if the size is gone or not to be fixed - if 'S', the variables largura_fixa and altura_fixa will be utilized, if 'N' will be calculed the zie by the variable 'porcentagem'### if you say 'S' here, and put '0' in $altura_fixa or $largura_fixa , the function will caculate for you the other size...###

$largura_fixa--> the fixed weight of the img (only if $tamanho_fixo="S")

$altura_fixa--> the fixed height of the img (only if $tamanho_fixo="S")

$porcentagem--> its the porcentage that will be used to calculate the new size of the img(only if $tamanho_fixo="N" ou "")

$nome_final-->its going to be acrecented after the 'thumb' and before of the img name, to have a diferent name to two thumbs of the same img

*/

//rebember that to send $nome_final, you have to send all the variables that the function have before the $nome_final, or the function will not work







//o caminho da imagem original(mude conforme o caminho para chegar a sua pasta de imagens sua pasta de imagens)

$caminho_img = $caminho_origem;

$caminho_thumb = $caminho_tumb;

str_replace(" ", "_", $imagem);

str_replace("%", "_", $imagem);

str_replace("%20", "_", $imagem);

$aux=explode(".", $imagem);

if($aux[1]=="gif")

{

   $tipo_da_imagem="GIF";

}

else if(($aux[1]=="jpg") || ($aux[1]=="jpeg"))

{

   $tipo_da_imagem="JPEG";

}

else if($aux[1]=="bmp")

{

   $tipo_da_imagem="GD";

   echo "Tipo de imagem inválido";

   return("");

}

else if($aux[1]=="png")

{

   $tipo_da_imagem="PNG";

}







if($tamanho_fixo=="")

{

   $tamanho_fixo="N";

   $porcentagem=40;

}

if(!file_exists($caminho_img.$imagem) || $imagem=="")

{

   //echo "O arquivo de imagem procurado não existe!";

}

else

{

if(strtoupper($tamanho_fixo)=="N" && ($porcentagem<1 || $porcentagem>100))

{

   //echo "O percentual deve estar entre 1 e 100";

}

else

{

//cria o nome da img miniatura

$img_thumb=explode(".",$imagem);

$img_thumb="thumb".$nome_final."_".$img_thumb[0].".jpg";

//lê a img original, e pega seu tamanho

$fun1="ImageCreateFrom".$tipo_da_imagem;

$img_original=$fun1($caminho_img.$imagem);

$origem_x=ImagesX($img_original);

$origem_y=ImagesY($img_original);

//caso não seja tamanho fixo, irá calcular o tamanho da nova img, baseado na porcentagem

if(strtoupper($tamanho_fixo)=="S")

{

   if(($largura_fixa==0) || ($altura_fixa==0))

   {

      if($altura_fixa==0)

      {

         if($largura_fixa==0) { $largura_fixa=100; }

         $x=$largura_fixa;

         $aux=getimagesize($caminho_origem.$imagem);

         $x_antes=$aux[0];

         $y_antes=$aux[1];

         $y=calcula_altura($x_antes,$y_antes,$x);

      }   

      else

      {

         if($altura_fixa==0) { $altura_fixa=150; }

         $y=$altura_fixa;

         $aux=getimagesize($caminho_origem.$imagem);

         $x_antes=$aux[0];

         $y_antes=$aux[1];

         $x=calcula_largura($x_antes,$y_antes,$y);

      }

   }

   else

   {

      $x=$largura_fixa;

      $y=$altura_fixa;

   }

}

else

{

   $x=intval($origem_x * $porcentagem/100);

   $y=intval($origem_y * $porcentagem/100);

}

//criando a img final, que conterá a miniatura

$img_final = ImageCreateTrueColor($x,$y);

//caso a img miniatura jah exista, não a cria de novo

if(!file_exists($caminho_thumb.$img_thumb))

{

//agora copia a img original, redimensionada, para a imagem final

ImageCopyResampled($img_final, $img_original, 0, 0, 0, 0, $x+1, $y+1, $origem_x, $origem_y);

//salva a nova imagem

$fun2="Image".$tipo_da_imagem;

$fun2($img_final, $caminho_thumb.$img_thumb);

}

//libera a memoria que usou para as duas img's

ImageDestroy($img_original);

ImageDestroy($img_final);

//retorna o caminho para que possa mostrar a nova miniatura

return($caminho_thumb.$img_thumb);

}

}

}



?>


Scripts recomendados

Simulado semelhante ao do vol em PHP!

Cadcomp 1.0

TheBlog 2.0

Graficos 3D simples e configuraveis com PHP

Classe para gerar logs


  

Comentários
[1] Comentário enviado por izziizzi em 22/04/2011 - 20:24h

e como eu chamo essa função?? desculpa e ignorancia...rs

[2] Comentário enviado por killerbean em 22/04/2011 - 21:42h

É só dar um include <miniatura.php> no topo do arquivo que for usar a função - considerando que a funçao está na sua pasta;

E na hora de usar ela, pode ser:
$caminho da miniatura("imagem.jpg","pasta_img" , "pasta_thumb")

e colocar essa variavel no argumento da tag <img> no html

;)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts