func_upload.php
Este script se encarregará de criar uma cópia redimensionada da imagem original, ou seja, é ele que criará nossas imagens menores, as
thumbnails. O script é na verdade uma função chamada createthumbnail(), que será chamada no meio do script que faz o upload. O código é o seguinte e logo depois, os comentários:
<?php
/*-----------------------------------------+
| by Luís Fred: fred.alphax@gmail.com
+------------------------------------------*/
function createthumbnail($filetype, $origfile, $thumbfile, $new_w, $new_h) {
global $settings;
if ($filetype == 1) { $origimage = imagecreatefromgif($origfile); }
elseif ($filetype == 2) { $origimage = imagecreatefromjpeg($origfile); }
elseif ($filetype == 3) { $origimage = imagecreatefrompng($origfile); }
$old_x = imagesx($origimage);
$old_y = imagesy($origimage);
if ($old_x > $new_w || $old_y > $new_h) {
if ($old_x < $old_y) {
$thumb_w = round(($old_x * $new_h) / $old_y);
$thumb_h = $new_h;
} elseif ($old_x > $old_y) {
$thumb_w = $new_w;
$thumb_h = round(($old_y * $new_w) / $old_x);
} else {
$thumb_w = $new_w;
$thumb_h = $new_h;
}
} else {
$thumb_w = $old_x;
$thumb_h = $old_y;
}
if ($settings['thumb_compression'] == "gd1") {
$thumbimage = imagecreate($thumb_w,$thumb_h);
$result = imagecopyresized($thumbimage, $origimage, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
} else {
$thumbimage = imagecreatetruecolor($thumb_w,$thumb_h);
$result = imagecopyresampled($thumbimage, $origimage, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
}
touch($thumbfile);
if ($filetype == 1) { imagegif($thumbimage, $thumbfile); }
elseif ($filetype == 2) { imagejpeg($thumbimage, $thumbfile); }
elseif ($filetype == 3) { imagepng($thumbimage, $thumbfile); }
}
function image_exists($dir, $image) {
$i = 1;
$image_name = substr($image, 0, strrpos($image, "."));
$image_ext = strrchr($image,".");
while (file_exists($dir.$image)) {
$image = $image_name."_".$i.$image_ext;
$i++;
}
return $image;
}
?>
Este é o código comentado:
<?php
/**
* @author Luís Fred
* @mail fred.alphax@gmail.com
*/
/*Esta é a função que se encarregará de criar as imagens menores, ela contem
*5 variáveis como parâmetros, que são:
* $filetype: o tipo de arquivo envolvido, se gif, jpeg ou png;
* $origfile: E o arquivo de imagem original, que você indicou para upload e que dará
* origem à uma imagem menor(thumb);
* $thumbfile: Este parâmetro conterá o caminho/nome da imagem que será a nossa imagem
* de tamanho reduzido(thumb);
* $new_w: Esta variável conterá o valor de configuração para a largura da imagem menor;
* $new_h: Está variável conterá o valor de configuração para a altura da imagem menor;
*/
function createthumbnail($filetype, $origfile, $thumbfile, $new_w, $new_h, $compress) {
/*Nas três linhas que seguem, são feitas algumas verificações acerca do tipo de arquivo de imagem.
*Para cada verificação bem sucedida, é criado um novo arquivo de imagem a partir da imagem original.
*a função imagecreatefrom*() retorna um identificador de imagem representando a imagem obtida através do nome de *arquivo dado.
**/
if ($filetype == 1) { $origimage = imagecreatefromgif($origfile); }
elseif ($filetype == 2) { $origimage = imagecreatefromjpeg($origfile); }
elseif ($filetype == 3) { $origimage = imagecreatefrompng($origfile); }
/*Nestas duas linhas que seguem, note que são obtidas largura e altura da imagem com as funções
*imagesx() e imagesy() respectivamente. para mais informações sobre as funções utilizadas neste
*script, acesse www.php.net
*/
$old_x = imagesx($origimage);
$old_y = imagesy($origimage);
/*verifica se a largura e altura obtidas anteriormente são maiores
*que a largura e a altura estabelecidas estabelecidas para as imagens menores
*que serão criadas.
*Em seguida, estabelece as novas dimensões para a imagem original. veja o uso
*da função round() na terceira linha do laço if():
*$thumb_w = round(($old_x * $new_h) / $old_y).
*multiplica-se o valor da largura que foi obtida da imagem, usando imagesx() pelo
*valor da altura estabelecido para a imagem menor. em seguida divide-se o valor obtido
*pela altura da imagem original, a função round() arredonda o valor do resultado nesta
*operação. Este resultado é então armazenado na variável $thumb_w, que será a largura
*da imagem pequena.
*a operação $thumb_h = round(($old_y * $new_w) / $old_x); segue o mesmo raciocínio.
*/
if ($old_x > $new_w || $old_y > $new_h) {
if ($old_x < $old_y) {
$thumb_w = round(($old_x * $new_h) / $old_y);
$thumb_h = $new_h;
} elseif ($old_x > $old_y) {
$thumb_w = $new_w;
$thumb_h = round(($old_y * $new_w) / $old_x);
} else {
$thumb_w = $new_w;
$thumb_h = $new_h;
}
} else {
$thumb_w = $old_x;
$thumb_h = $old_y;
}
/*a partir daqui, temos a criação propriamente dita, das imagens pequenas.
*Repare nas funções imagecreate() e imagecreatetruecolor(). Esta ultima requer
*versão GD 2.0.1 ou maiores. se não for possível usar gd1, então será usada gd2 para
*diminuir a imagem original.
*a função imagecopyresized() redimensiona e copia a imagem.
*imagecreatetruecolor() tem um efeito similar a imagecreate().
*Para mais informações a respeito de imagecreatetruecolor(), imagecreate() e imagecopyresampled(),
*acesse www.php.net.
*/
if ($compress == "gd1") {
$thumbimage = imagecreate($thumb_w,$thumb_h);
$result = imagecopyresized($thumbimage, $origimage, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
} else {
$thumbimage = imagecreatetruecolor($thumb_w,$thumb_h);
$result = imagecopyresampled($thumbimage, $origimage, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
}
/*Muda o tempo de acesso e modificação do arquivo de imagem fornecido como terceiro parâmetro da função *createthumbnail() para o tempo atual.
*/
touch($thumbfile);
/*a função imagegif() cria uma imagem gif em $thumbfile a partir de $thumbimage
*que guarda a imagem que foi criada com novas dimensões.
*imagejpeg() e imagepng() tem efeitos similares a função imagegif().
*/
if ($filetype == 1) { imagegif($thumbimage, $thumbfile); }
elseif ($filetype == 2) { imagejpeg($thumbimage, $thumbfile); }
elseif ($filetype == 3) { imagepng($thumbimage, $thumbfile); }
}
/*Esta função checa se uma imagem existe em um determinado diretório.
*se a imagem procurada existir, então será criado um nome diferente para ela
*/
function image_exists($dir, $image) {
$i = 1;
$image_name = substr($image, 0, strrpos($image, "."));
$image_ext = strrchr($image,".");
while (file_exists($dir.$image)) {
$image = $image_name."_".$i.$image_ext;
$i++;
}
return $image;
}
?>
Faça o download do código acima
aqui.