Gerador de Thumbnails
Publicado por Rogério Bragil 10/11/2004
[ Hits: 17.259 ]
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; } ?>
Agora temos uma assistente virtual no fórum!!! (246)
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como eu faço para ativar o sistema de gestos do mousepad? (4)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (13)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta