Gerador de Thumbnails
Publicado por Rogério Bragil 10/11/2004
[ Hits: 17.740 ]
Homepage: http://www.bragil.net
Esse gerador de thumbnails gera miniaturas de mesmo tamanho, não importando se a imagem original é grande ou pequena. Ele faz um cálculo de aproximação, de modo que as imagem sejam reduzidas de forma homogênea sem ficarem com o aspecto achatado. Ideal para fotologs. Deve existir um diretório com o nome de "thumbs", no mesmo caminho do script , com permissão de escrita.
<?
/*
thumbMaker - versão 0.4 - Por Rogério Bragil - www.bragil.org - Este script
cria um thumbnail de uma imagem através de um cálculo de aproximação. Você
pode criar miniaturas de imagens de diferentes tamanhos que o resultado será
uma coleção de thumbnails de dimensões parecidas. Ideal para albuns de fotos,
onde basta você fazer o upload da imagem e deixar o script gerar o thumbnail.
OBS: trabalha com jpg e png somente. O thumbnail será gerado no diretório thumbs,
portanto você deve criar esse diretório previamente, com permissão de escrita.
e-mail: rogerio@bragil.org - Qualquer sugestão, dúvida ou crítica serão bem aceitos!
o parâmetro aprox é o tamanho que você quer aproximar (por exemplo, você quer reduzir
uma imagem 1024x768 pixels para aproximadamente 200x200 pixels, mas como a imagem
original não é exatamente quadrada, é feito um cálculo, onde esta imagem reduzirá
para, mais ou menos, 200x150 pixels, para não ficar com o aspecto "achatada").
*/
function thumbMaker($imagem, $aprox)
{
if (!file_exists($imagem))
{
echo "<center><h3>Imagem não encontrada.</h3></center>";
return false;
}
// verifica se está executando sob windows ou unix-like, para a
// aplicação do separador de diretórios correto.
if (strtoupper(substr(PHP_OS, 0,3) == 'WIN'))
$barra= "\\";
else
$barra= "/";
// obtém a extensão pelo mime-type
$ext= getExt($imagem);
if (!$ext)
{
echo "<center><h3>Tipo inválido</h3></center>";
return false;
}
// separa o nome do arquivo do(s) diretório(s)
$dir_arq= explode($barra, $imagem);
// monta o nome do arquivo a ser gerado (thumbnail). O sizeof abaixo obtém o número de itens
// no array, dessa forma podemos pegar somente o nome do arquivo, não importando em que
// diretório está.
$i= sizeof($dir_arq) - 1; // pega o nome do arquivo, sem os diretórios
$arquivo_miniatura= "thumbs".$barra."mini_".$dir_arq[$i];
// imagem de origem
if ($ext == "png")
$img_origem= imagecreatefrompng($imagem);
elseif ($ext == "jpg")
$img_origem= imagecreatefromjpeg($imagem);
// obtém as dimensões da imagem original
$origem_x= ImagesX($img_origem);
$origem_y= ImagesY($img_origem);
$x= $origem_x;
$y= $origem_y;
// Aqui é feito um cálculo para aproximar o tamanho da imagem ao valor passado em $aprox.
// Não importa se a foto for grande ou pequena, o thumb de todas elas será mais ou menos do
// mesmo tamanho.
if ($x >= $y)
{
if ($x > $aprox)
{
$x1= (int)($x * ($aprox/$x));
$y1= (int)($y * ($aprox/$x));
}
// incluido o else abaixo. Caso a imagem seja menor do que
// deve ser aproximado, mantém tamanho original para o thumb.
else
{
$x1= $x;
$y1= $y;
}
}
else
{
if ($y > $aprox)
{
$x1= (int)($x * ($aprox/$y));
$y1= (int)($y * ($aprox/$y));
}
// incluido o else abaixo. Caso a imagem seja menor do que
// deve ser aproximado, mantém tamanho original para o thumb.
else
{
$x1= $x;
$y1= $y;
}
}
$x= $x1;
$y= $y1;
// cria a imagem do thumbnail
$img_final = ImageCreateTrueColor($x, $y);
ImageCopyResampled($img_final, $img_origem, 0, 0, 0, 0, $x+1, $y+1, $origem_x, $origem_y);
// o arquivo é gravado
if ($ext == "png")
imagepng($img_final, $arquivo_miniatura);
elseif ($ext == "jpg")
imagejpeg($img_final, $arquivo_miniatura);
// a memória usada para tudo isso é liberada.
ImageDestroy($img_origem);
ImageDestroy($img_final);
return true;
}
// getExt - Verifica o mime-type da imagem e retorna a extensão do arquivo
function getExt($imagem)
{
// isso é para obter o mime-type da imagem.
$mime= getimagesize($imagem);
if ($mime[2] == 2)
{
$ext= "jpg";
return $ext;
}
else
if ($mime[2] == 3)
{
$ext= "png";
return $ext;
}
else
return false;
}
?>
Backup de arquivos na Cloud com AWS Amazon S3 e PHP
Calsse eveFile: manipulação de arquivos
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (0)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









