Ir para conteúdo

POWERED BY:

Arquivado

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

Quelipe

Classe para upload de foto (POO)

Recommended Posts

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

É 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. Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, muito obrigado por compartilhar! Funcionando demais.. realmente me ajudou muito!

=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

 

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 Document
Agora 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

×

Informação importante

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