<? /* thumbMaker - vers�o 0.1 - 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>"; exit; } // 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>"; exit; } // 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); } // 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. Se n�o me engano, s� funciona nas // vers�es acima de 4.3.0 do PHP $mime= exif_imagetype($imagem); if ($mime == IMAGETYPE_JPEG) { $ext= "jpg"; return $ext; } else if ($mime == IMAGETYPE_PNG) { $ext= "png"; return $ext; } else return false; } ?>