Quelipe 15 Denunciar post Postado Julho 14, 2010 Olá galera, desenvolvi uma classe para fazer upload de foto e estou compartilhado com a comunidade. Bom a classe faz as seguintes funções: faz upload do arquivo, renomea o arquivo,coloca a marca d'agua e redimensiona a imagem. Então vamos lá, primeiro vamos ver a classe principal. Ela está toda comentada e com as referências das funções para o php.net: upload.class.php <?php /* * @copyright : Edimilson Sousa Quelipe * @autor : Edimilson Sousa Quelipe * @data criação : 14/07/2010 * @site : www.quelipe.com.br * @contato : quelipe_@hotmail.com */ class upload { var $pasta; // caminho de destino da imagem var $nome; // nome da imagem var $lrgura; // largura limite desejada var $altura; // altura limite desejada var $tmp_name; // nome temporário da imagem var $img_marca; // caminho completo para a imagem da marca d'agua //método para subir o arquivo para o servidor public function uploadArquivo() { // http://br3.php.net/manual/pt_BR/function.end.php // http://br3.php.net/manual/pt_BR/function.explode.php $this->nome = $this->nomeRandomico().".".end(explode(".",$this->nome)); // http://br3.php.net/manual/pt_BR/function.move-uploaded-file.php if(move_uploaded_file($this->tmp_name, $this->pasta."/".$this->nome)) { $this->marcaDagua(); $this->redimensiona(); } } //método para redimensionar a imagem private function redimensiona() { $img = $this->pasta."/".$this->nome; // recupera tamanho da imagem e tipo // http://br3.php.net/manual/pt_BR/function.getimagesize.php list($larguraOriginal, $alturaOriginal, $type) = getimagesize($img); // faz checagem se a redimensão será via largura ou altura if ($this->largura && ($larguraOriginal < $alturaOriginal)) { $this->largura = ($this->altura / $alturaOriginal) * $larguraOriginal; } else { $this->altura = ($this->largura / $larguraOriginal) * $alturaOriginal; } // cria imagem com as dimensoes especificadas por parametro // http://www.php.net/manual/pt_BR/function.imagecreatetruecolor.php $novaImagem = imagecreatetruecolor($this->largura, $this->altura); // cria imagem JPEG // http://br3.php.net/manual/pt_BR/function.imagecreatefromjpeg.php $image = imagecreatefromjpeg($img); // http://br3.php.net/manual/pt_BR/function.imagecopyresampled.php imagecopyresampled($novaImagem, $image, 0, 0, 0, 0, $this->largura, $this->altura, $larguraOriginal, $alturaOriginal); // http://br3.php.net/manual/pt_BR/function.imagejpeg.php imagejpeg($novaImagem, $img, 100); } //método para colocar a marca d'agua na imagem private function marcaDagua() { // Obtém o cabeçalho de ambas as imagens // http://br3.php.net/manual/pt_BR/function.imagecreatefrompng.php $cab_marca = imagecreatefrompng($this->img_marca); // http://br3.php.net/manual/pt_BR/function.imagecreatefromjpeg.php $cab_imagem = imagecreatefromjpeg($this->pasta."/".$this->nome); // Obtém os tamanhos de ambas as imagens // http://br3.php.net/manual/pt_BR/function.getimagesize.php $tam_imagem = getimagesize($this->pasta."/".$this->nome); $tam_marca = getimagesize($this->img_marca); $largura_img = $tam_imagem[0]; $altura_img = $tam_imagem[1]; $largura_marca = $tam_marca[0]; $altura_marca = $tam_marca[1]; // Aqui, defini-se a posição onde a marca deve aparecer na foto: Rodapé Direito $eixo_x = ($largura_img - $largura_marca) - 5; $eixo_y = ($altura_img - $altura_marca) - 5; // http://br3.php.net/manual/pt_BR/function.imagecolortransparent.php // http://br3.php.net/manual/pt_BR/function.imagecolorallocate.php imagecolortransparent($cab_marca, imagecolorallocate($cab_marca, 4, 137, 193)); // A função principal: misturar as duas imagens imageCopyMerge($cab_imagem, $cab_marca, $eixo_x, $eixo_y, 0, 0, $largura_marca, $altura_marca, 50); // Cria a imagem com a marca da agua // http://br3.php.net/manual/pt_BR/function.getimagesize.php imagejpeg($cab_imagem, $this->pasta."/".$this->nome, 90); } //método para gerar um nome randomico para o arquivo public function nomeRandomico() { $novoNome = ""; for($i=0; $i<20; $i++) { // http://br3.php.net/manual/pt_BR/function.rand.php $novoNome .= rand(0,9); } return $novoNome; } } ?> Agora um teste para o upload do arquivo: index.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Untitled Document</title> </head> <body> <form id="form1" name="form1" enctype="multipart/form-data" method="post" action="executa.php"> <label> <input type="file" name="file" /> </label> <label> <input type="submit" name="Submit" value="Enviar" /> </label> </form> </body> </html> Agora o arquivo que executa todo o processo: executa.php <?php /* * @copyright : Edimilson Sousa Quelipe * @autor : Edimilson Sousa Quelipe * @data criação : 14/07/2010 * @site : www.quelipe.com.br * @contato : quelipe_@hotmail.com */ include "upload.class.php"; // inclusão da classe $up = new upload(); // instância do objeto $up->pasta = "teste"; // pasta de destino $up->nome = $_FILES['file']['name']; // nome da imagem enviada do form $up->tmp_name = $_FILES['file']['tmp_name'];// arquivo temporário $up->img_marca = "teste.png"; // caminho da imagem que será marca d'agua (.png) $up->largura = "450"; // máxima largura para a nova foto $up->altura = "450"; // máxima altura para a nova foto $up->uploadArquivo(); // execução do método echo "<script>history.back();</script>"; ?> É isso aí, espero que seja útil para alguém. At+ Compartilhar este post Link para o post Compartilhar em outros sites
yuriarrua 0 Denunciar post Postado Julho 16, 2010 É isso aí, espero que seja útil para alguém. At+ Muito bom o script, esta sendo muito util pra mim, estou modificando ele para na hora do upload ele tbm gravar no bd o nome da imagem e o id de para quem foi a mesma. Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme_90 33 Denunciar post Postado Outubro 22, 2011 Cara, muito obrigado por compartilhar! Funcionando demais.. realmente me ajudou muito! =) Compartilhar este post Link para o post Compartilhar em outros sites
Dii 15 Denunciar post Postado Janeiro 18, 2012 Parabéns pelo código ! So existe um pergunta: E se eu fizer um upload com um .exe? Em momento algum voce validou a signature das images. Mas ficou massa ^^ Compartilhar este post Link para o post Compartilhar em outros sites
Anilton Veiga 0 Denunciar post Postado Janeiro 20, 2012 Uma outra duvida, com essa classe se eu quisesse fazer varios uploads, vamos supor, varios inputs files, como faria! é complicado? Compartilhar este post Link para o post Compartilhar em outros sites
carlosmadeiracunha 3 Denunciar post Postado Outubro 12, 2013 Olá galera, desenvolvi uma classe para fazer upload de foto e estou compartilhado com a comunidade. Bom a classe faz as seguintes funções: faz upload do arquivo, renomea o arquivo,coloca a marca d'agua e redimensiona a imagem. Então vamos lá, primeiro vamos ver a classe principal. Ela está toda comentada e com as referências das funções para o php.net: upload.class.php Agora um teste para o upload do arquivo: index.php Untitled DocumentAgora o arquivo que executa todo o processo: executa.php É isso aí, espero que seja útil para alguém. At+ Eu fiz umas alterações no upload.class.php e agora funciona também com png e gif, antes o pngs e gifs se transformavam em uma imagem preta agora não mas tem um problema, png´s e gif´s com fundo transparente ficam com fundo preto. :yes: Eu fiz também que colocasse o nome original mas antes vem com a data do upload. Antes vamos corrigir um errinho bobo, fácil de cometer, a palavra estava errada. var $lrgura; // largura limite desejada var $largura; // largura limite desejada Vamos às alterações: Antes // cria imagem JPEG // http://br3.php.net/manual/pt_BR/function.imagecreatefromjpeg.php'>http://br3.php.net/manual/pt_BR/function.imagecreatefromjpeg.php $image = imagecreatefromjpeg($img); _________________________________ Depois - Acrescentei else if e else if($image = imagecreatefromjpeg($img)){ }else if($image = imagecreatefrompng($img)){ }else ($image = imagecreatefromgif($img)); Pronto, agora aceita o png e gif. Pra deixar o novo nome com a data do upload e o nome original. Primeiro mudei o nome da função pra não confundir. Antes $this->nome = $this->nomeRandomico().".".end(explode(".",$this->nome)); _________________________________ Depois $this->nome = $this->novoNome().".".end(explode(".",$this->nome)); Agora eu vou na função e apago umas linhas e troco o nome dela e o novo nome da imagem só pra eu não me perder. Antes //método para gerar um nome randomico para o arquivo public function nomeRandomico() { $novoNome = ""; for($i=0; $i<20; $i++) { // http://br3.php.net/manual/pt_BR/ function.rand.php $novoNome .= rand(0,9); } return $novoNome; __________________________________ Depois //método para gerar um nome randomico para o arquivo public function novoNome() { $novoNomeImagem = date('d-m-y').'-'.$this->nome; return $novoNomeImagem; Quero deixar bem claro que esta função me ajudou muito, como sou novo no php não sabia fazer uma classe destas, tinha uma noção mas não sabia fazê-la. Valeu Quelipe. :joia: Bem, estas alterações foram feitas porque eu precisava buscar imagens pelo nome no BD através de um sisteminha de busca e a galeria vai ter com certeza estas extensões de imagens. Espero não ter causado algum problema com o Quelipe, mas resolvi postar aqui estas alterações porque outro parceiro pode estar procurando algo do tipo. Obrigado e até mais. :innocent: Compartilhar este post Link para o post Compartilhar em outros sites