Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mata Hary

[RESOLVIDO] Reduzir tamanho da imagem em bytes

Recommended Posts

Tenho um formulário e a pessoa envia a foto com até 500 kb e ela é salva na pasta imagens e o nome e caminho da foto é salva na BD.Gostaria que após o upload a imagem fosse redimensionada reduzindo o tamanho dela em bytes.Eu sei que tem como reduzir o tamanho da imagem em tela, mas isso nao reduz o tamanho em bytes.Sei também que dá pra fazer thumbnail dessa imagem.Acho que a solução está aí.Fazer um thumb da imagem no momento do upload e em seguida deletar a imagem original do diretorio, mas nao sei como fazer isso.O thum eu sei pq vi no laboratorio de scripts, agora como deletar a imagem original depois é que eu nao sei.Alguem pode me ajudar??? :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

o script abaixo recebe como parametro em GET uma pasta tal contendo imagens de preferencia jpg,percorre toda essa pasta redimensionando as imagens.Eu geralmente deixo com 640px de largura no máximo então o proprietário do site que envia as fotos, muitas chegam no site com até 1MB de do script executado, elas ficam no máximo com 190kb devido ao original estar acima de 72dpis, Eu até hoje não consegui uma forma de alterar os dpis da foto e acho que em php num tem como, então eu oriento o proprietário a utilizar menos qualidade na hora de fotografar.Eu não deixei automatico a chamada do script mas coloquei no menu de administração da seguinte forma:<a href=index.php?act=otm&folder=Fotos_Loc> // onde o act=otm inclui o script abaixo que tem nome de thumbnail.php. Ele pode ser utilizado tambem para criar thumbs mas neste caso teria que eliminar o comando unlink (que apaga o arquivo original) e manter o prefixo tn_ como sugere o inicio do script.

<?phpdefine ('folder', "../{$_GET['folder']}/");$total=0;$counter=0;echo "Aguarde por favor ...<br>";$gd2=checkgd() or die("erro no GD"); $pics=directory(folder,"jpg,JPG,JPEG,jpeg"); $pics=ditchtn($pics,"tn_"); if ($pics[0]!="") { foreach ($pics as $p) { $total++; $image_info = GetImageSize(folder . $p); list($width, $height) = $image_info; if ($width > 640) { createthumb($p,"tn_".$p,640,480); $counter++; } elseif($height > 640) { createthumb($p,"tn_".$p,480,640); $counter++; } } echo "."; }if ($counter) echo "<br>Total de arquivos: $total<br>Atualizado $counter arquivos!";else echo "<br>Total de arquivos: $total<br>Nenhum arquivo foi encontrado para atualização!";/* Function checkgd() checks the version of gd, and returns "yes" when it's higher than 2 */ function checkgd() { $gd2=""; ob_start(); phpinfo(8); $phpinfo=ob_get_contents(); ob_end_clean(); $phpinfo=strip_tags($phpinfo); $phpinfo=stristr($phpinfo,"gd version"); $phpinfo=stristr($phpinfo,"version"); preg_match('/\d/', $phpinfo, $gd); if ($gd[0]=='2') { $gd2="yes"; } return $gd2; }/* Function ditchtn($arr,$thumbname) filters out thumbnails */ function ditchtn($arr, $thumbname) { foreach ($arr as $item) { if (!preg_match("/^" . $thumbname . "/", $item)) { $tmparr[]=$item; } } return $tmparr; }/* Function createthumb($name, $filename, $new_w, $new_h) creates a resized image variables: $name Original filename $filename Filename of the resized image $new_w width of resized image $new_h height of resized image */function createthumb($name, $filename, $new_w, $new_h) { global $gd2; $system = explode(".",$name); if (preg_match("/jpg|jpeg/",$system[1])) { $src_img = imagecreatefromjpeg(folder . $name); } $old_x = imageSX($src_img); $old_y = imageSY($src_img); $thumb_w = $new_w; $thumb_h = $new_h; if ($gd2 == "") { $dst_img = ImageCreate($thumb_w, $thumb_h); imagecopyresized($dst_img, $src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); } else { $dst_img = ImageCreateTrueColor($thumb_w,$thumb_h); imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); } $newFile=substr($filename, -(strlen($filename)-3)); unlink(folder . $newFile) or die("erro nao apaga"); imagejpeg($dst_img, folder . $newFile); imagedestroy($dst_img); imagedestroy($src_img); echo "<br>Novo arquivo criado " . folder . $newFile; }/* Function directory($directory, $filters) reads the content of $directory, takes the files that apply to $filter and returns an array of the filenames. You can specify which files to read, for example $files = directory(".","jpg,gif"); gets all jpg and gif files in this directory. $files = directory(".","all"); gets all files. */ function directory($dir, $filters) { $handle=opendir($dir); $files = array(); if ($filters == "all") { while(($file = readdir($handle)) !== false) { $files[] = $file; } } if ($filters != "all") { $filters=explode(",",$filters); while (($file = readdir($handle)) !== false) { for ($f = 0;$f < sizeof($filters); $f++): $system=explode(".",$file); if ($system[1] == $filters[$f]) { $files[] = $file; } endfor; } } closedir($handle); return $files; } ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro gostaria de agradecer pela ajuda.Eu copiei o código que você postou e colei numa pagina (chamei de php.php) e fiz outra (chamei de chama.php)com o link chamando a pagina. Só que nao importa o que eu faça dá sempre o mesma resposta:Aguarde por favor ....Total de arquivos: 2Nenhum arquivo foi encontrado para atualização!Já coloquei 1 foto, 5 fotos e aparece sempre que tem dois arquivos. Ja coloquei as fotos numa pasta chamada imagens. Não sabia direito onde alterar o nome e coloquei o nome da pasta de folder pra ver se funcionava, coloquei as fotos no mesmo diretorio da pagina php.php com o codigo e nada funcionou. Sempre aparece a mesma mensagem.O que será que estou fazendo de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) se você copiou o codigo na integra observe:

 

define ('folder', "../{$_GET['folder']}/");

 

a var folder aponta para um diretorio no mesmo nivel do diretorio em que está o script: no meu caso o script está no diretorio admin e o folder que passo (Fotos_Vda ou Fotos_Loc) estão no mesmo nível portanto o '../' indica que para o script enxergar o folder, ele deve voltar um nivel na árvore de diretorios.

 

Se ele mostra so um arquivo é porque ele num ta chegando no folder, ele ta apontando para a pasta errada.

pede pra dar um echo no folder e ve o seu valor e depois ajusta retirando o '../' se o folder estiver num nivel abaixo do script ou acrescenta '../../' se o folder estiver dois niveis acima de onde está o script.

 

É esse o seu problema:

 

partindo do principio que o o script abaixo esteja na raiz do site ou seja http://www.seudominio.com.br/script.php por exemplo e tenha uma pasta chamada imagens por exemplo e dentro dessa pasta tenha as suas fotos, neste caso, o conteudo da pasta imagens está um nivel abaixo da pasta do script e portanto neste caso não é necessário o '../' por a var folder vai ser 'images/'

 

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

//deletar a imagem original$path_completo=$_SERVER['DOCUMENT_ROOT'].str_replace("/","\\",str_replace(nome da pagina entre aspas,"web/logos/",$_SERVER['PHP_SELF'])).$figura.$extensao;unlink($path_completo);//deletar a imagem original

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.