Ir para conteúdo

POWERED BY:

Arquivado

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

Paulo Freitas Nobrega

upload de imagens com marcas d' águas

Recommended Posts

Não tenho certeza se este forum é adequado para está duvida. Caso não seja peço desculpas!

 

É o seguinte, criei um sistema de upload de imagem que gera thumbs, posta no banco e também insere marca d' água. Todo o sistema está funcionando perfeitamente, ele upá, posta, insere a marca tudo certinho. Só que a marca d' água está ficando toda serrilhada, exportei tanto pelo photoshop e pelo fireworks, o problema continua...

 

Para exportar deixei a configuração de PNG-8 com transparência como já haivia visto aqui e em outros foruns, mas mesmo assim ficou serrilhado.

 

Coloquei os resultados no ar para vcs possam dar uma olhada:

 

- Página de visualização da imagens já com as marcas: http://www.ilhasolteira.net/ilhanabalada/ (só clicar em abrir)

 

- Marca d' água em psd: http://www.ilhasolteira.net/ilhanabalada/a...mages/marca.psd

 

- Class que manipula as imagens:

<?php
set_time_limit(0);
class fileManipulation{
	
	var $imagesCount;
	var $imagesEvent;
	var $imagesMark = "../images/marca.png";
	var $imagesDir = "../../fotos/";
	var $imagesDiscardsAlerts = "";
	var $imagesDiscards = array();	
	var $manegeError = array (
		"0" => "upload execultado com sucesso!",
		"1" => "O arquivo é maior que o permitido pelo Servidor",
		"2" => "O arquivo é maior que o permitido pelo formulario",
		"3" => "O upload do arquivo foi feito parcialmente",	 
		"4" => "Não foi feito o upload do arquivo"
	);
	
	function imagesDimension($img, $max_x, $max_y, $nome_foto, $imageType) {
	
		//pega o tamanho da imagem ($original_x, $original_y)
		list($width, $height) = getimagesize($img);
		
		$original_x = $width;
		$original_y = $height;
		
		// se a largura for maior que altura		
		if($imageType == 1) {
			if($original_x > $original_y) {
				$porcentagem = (100 * $max_x) / $original_x;	  
			} else {
				$porcentagem = (100 * $max_y) / $original_y;   
			}
			
			$tamanho_x = $original_x * ($porcentagem / 100);		
			$tamanho_y = $original_y * ($porcentagem / 100);
			
			$image_p = imagecreatetruecolor($tamanho_x, $tamanho_y);
			$image   = imagecreatefromjpeg($img);
				
			imagecopyresampled($image_p, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $width, $height);
			
			return imagejpeg($image_p, $nome_foto, 100);
		} else {				
			$porcentagem = (100 * $max_x) / $original_x;	  
			
			$tamanho_x = $original_x * ($porcentagem / 100);		
			$tamanho_y = $original_y * ($porcentagem / 100);
		
			$image_p = imagecreatetruecolor($max_x, $max_y);
			$imageTemp = imagecreatetruecolor($tamanho_x, $tamanho_y);
			
			$image = imagecreatefromjpeg($img);
			imagecopyresized($imageTemp, $image, 0, 0, 0, 0, $tamanho_x, $tamanho_y, $original_x, $original_y);			
				
			imagecopy($image_p, $imageTemp, 0, 0, 0, 0, $max_x, $max_y);
			
			return imagejpeg($image_p, $nome_foto, 100);			
		}
	}
	
	function imagesPostBank($img, $thumb) {
		//Armazena o número do evento que corresponde as fotos
		$this->imagesEvent = $_POST['imagesEvent'];
		
		//Insere o número do evento, foto e thumb no banco de dados
		include "../conn.php";
		$sql = "INSERT INTO imagens (evento, foto, thumb) VALUES ('$this->imagesEvent', '$img', '$thumb')";
		$sql = mysql_query($sql) or die ( "Houve erro na gravação de dados." );
		mysql_close();		
		return true;
	}
	
	function imagesMarkes($img) {		
		@header("Content-type: image/png");
		$imgPrimary = imagecreatefromjpeg($img);
		$mark = imagecreatefrompng($this->imagesMark);		
		
		$imgPrimaryHeight = (imagesy($imgPrimary) - 56);
		
		$markx = imagesx($mark);
		$marky = imagesy($mark);		
		
		imagecopymerge($imgPrimary, $mark, 0, $imgPrimaryHeight, 0, 0, $markx, $marky, 90);
		imagejpeg($imgPrimary, $img, 100);
		
		@imagedestroy($imgPrimary);
		@imagedestroy($mark);		
	}
	
	function imagesValidate() {	
		//Calcula a quantidade de fotos submetidas
		$this->imagesCount = count($_FILES['inputFile']['name']);		
		
		for($x=0; $x < $this->imagesCount; $x++) {
			if(isset($_FILES['inputFile']) ? $_FILES['inputFile'] : FALSE) {			
				//Se o arquivo temp não for criado retorna false
				if(!is_uploaded_file($_FILES['inputFile']['tmp_name'][$x])) {
					return false;
				}				
				$getImageMime = getimagesize($_FILES['inputFile']['tmp_name'][$x]);
				//Se o arquivo for diferente de JPEG retorna erro
				if($getImageMime['mime'] != "image/jpeg") {
					//Informa que o upload não foi realizado e insere a imagem na array de imagens descartadas
					echo $this->$imagesDiscardsAlerts = "Erro: O arquivo " . $_FILES['inputFile']['name'][$x] . " não é uma imagem '.jpg', por isso seu upload não será realizado. <br />";					
					array_push($this->imagesDiscards, $_FILES['inputFile']['name'][$x]);					
				}
			} else {
				exit;
			}
		}
		
		//Se o número de imagens descartadas for igual ao numero de imagens submetidas a função é encerrada
		if(count($this->imagesDiscards) == $this->imagesCount) {
			exit;
		}
		return true;
	}	
	
	function imageSend() {		
		if($this->imagesValidate()) {			
			//Se a validação retornar sucesso chama a função para a criação da imagem
			$this->imagesCreate();
		} else {			
		}
	}
	
	function imagesCreate() {
		//Cria a pasta caso ela não exista
		if(!file_exists($this->imagesDir)) {
			mkdir($this->imagesDir);
		}
		
		//Calcula a quantidade de fotos submetidas
		$this->imagesCount = count($_FILES['inputFile']['name']);		
		for($x=0; $x < $this->imagesCount; $x++) {
			//Busca na array imagesDiscards o valor 'name' do arquivo $_FILES
			foreach($this->imagesDiscards as $value) {
				if($_FILES['inputFile']['name'][$x] == $value) {
					$serchImagesDiscards = 1;
				} else {
					$serchImagesDiscards = 0;
				}
			}
			
			//Se $serchImagesDiscards for igual a 0 cria um novo nome para a imagem
			if ($serchImagesDiscards == 0) {
				$imageName = "imagem".time(). $x . ".jpg";		
				$thumbName = "thumb".time(). ($x+5) . ".jpg";
				
				//Redimensiona e cria as imagens				
				$this->imagesDimension($_FILES['inputFile']['tmp_name'][$x], 315, 420, $this->imagesDir.$imageName, 1);		 
				$this->imagesDimension($_FILES['inputFile']['tmp_name'][$x], 107, 79, $this->imagesDir.$thumbName, 2);				
				
				//Se a criação da imagem foi realizada com sucesso passa para o próximo passo
				if($_FILES['inputFile']['error'][$x] != 0) {
					echo "Retorno: " . $this->manegeError[$_FILES['inputFile']['error'][$x]] . "</span>";
					exit;
				} else {
					$this->imagesPostBank($imageName, $thumbName);
					$this->imagesMarkes($this->imagesDir.$imageName);
					echo "<script>document.location.href='../?session=4'</script>";
				}				
			} else {
			}
		}		
	}	
}

$showFileManipulation = new fileManipulation();
echo $showFileManipulation->imageSend();
?>

Fico no aguardo de Help's....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na hora de exportar a marca d' água me aparenta esta normal, vendo no windows explorer também. Mas depois que executo o código e a marca d' água é inserida na imagem fica serrilhada.

 

As dimensões são: 315x56

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

As dimensões originais são as que passei: 315x56

Coloquei a imagem apenas para você ver o que estava acontecendo...

 

a imagem no tamanho original postada no host:

Imagem Postada

 

Link: http://www.ilhasolteira.net/ilhanabalada/a...mages/marca.png

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.