By Marcos Oliveira,

Salve salve rapaziada, como o próprio título diz, segue os códigos em 3 arquivos comentados, utilizando PDO no PHP para tal façanha, eu iria fazer um vídeo-tutorial, mas no final todo mundo pede pra disponibilizar o código então segue-os em 3 arquivos.

index.php , classe.php e Conexao.class.php

index.php

<!DOCTYPE html>
<html lang="pt-br">
<head>
  <meta charset="utf-8" />

  <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame 
       Remove this if you use the .htaccess -->
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />

  <title>Redimensionamento PHP</title>
  <meta name="description" content="" />
  <meta name="author" content="marcos" />

  <meta name="viewport" content="width=device-width; initial-scale=1.0" />

  <!-- Replace favicon.ico & apple-touch-icon.jpg in the root of your domain and delete these references -->
  <link rel="shortcut icon" href="/favicon.ico" />
  <link rel="apple-touch-icon" href="/apple-touch-icon.jpg" />
  <link rel="stylesheet" media="screen" type="text/css" href="estilo.css" />
</head>

<body>
  <div>
    <header>
      <h4>Redimensionamento e Marca D'Agua de Imagens</h4>
    </header>
    <nav>
    	<form action="" method="post" enctype="multipart/form-data">    		
    		<input type="file" name="img" class="img" /><br />   	
    		<b>Marca D'Agua: </b><input type="checkbox" name="marca" checked="checked"/><br />	
    		<input type="submit" name="enviar" class="enviar" /><br />    		
    	</form>
    	<br />
    	<a href="./"><button>Atualizar Página</button></a>
    	<br /><br />
    	<div id="mensagens">
<?php
  /* incluimos a classe que contem os métodos de redimensionamento, marca dagua e gravar no banco */ 	  
  require_once ('classe.php');
  /* Instanciamos a classe */
  $redimensionar = new Redimensionar();
  /* após clicar no botao enviar */
  if(isset($_POST['enviar'])){
  	  /* se não houver imagem carregada setamos o método adequado */	  
	  if($_FILES['img']['name'] == FALSE){	  	
	  	$redimensionar->exibe(); 
	  }else{
	  	/* atribuimos valores as variaveis necessárias*/	  	
	  	$nome = $_FILES['img']['name'];
		$img = $_FILES['img'];
		$nome = $img['name'];
		$tmp = $img['tmp_name'];
		$type = $img['type'];
		/* Para tratamento de erros */
		try{
			/* se o checkbox estiver marcado pra pôr marca dagua, passamos a informação*/
			if(isset($_POST['marca']) == TRUE){
				$marca = $_POST['marca'];
				$redimensionar->redimensiona($tmp, $nome, '400',$type,$marca);
			}else{
				/* caso o checkbox esteja desmarcado */
				$redimensionar->redimensiona($tmp, $nome, '400',$type);
			}				
		}catch(PDOException $e){
			echo $e->get_Message();		  
		}

		
	  }	  
  }  
?>
     </div>

<div id="imgz">
	<h4>Imagens já cadastradas</h4>
	<?php
	/* lista as imagens que já estão cadastradas, se já houver */
	$conn = $redimensionar->meth;
	$sqlConn = "SELECT * FROM `img` ORDER BY `id` DESC";
	$qryConn = $conn->prepare($sqlConn);
	$qryConn->execute();
	while($l = $qryConn->fetch()){
		echo '<b><img src="uploads/'.$l['arquivo'].'" /><br />'.$l['arquivo']; 
	}
	?>
</div>
    </nav>

    <footer>
     <p>marcospinguim.blogspot.com</p>
    </footer>
  </div>
</body>
</html>

classe.php

<?php
    /* servirá pra incluir o arquivo Conexao.class.php, se houvessem vários com *.class.php, 
	 * incluiria todos sem precisar fazer 1 por 1 */
	function __autoload($class){
		require_once $class.'.class'.'.php';
	}
	
	/* Classe se chama Redimensionar, porém fará mais que isso */
  class Redimensionar {
  	/* propriedades da classe */
    public $permitido = array('image/jpg', 'image/jpeg', 'image/png');
	public $meth;
	public $nm;
    /* carregará automaticamente a conexao, ao instancia a classe e armazenará na propriedade $meth */
	function __construct(){
		/* já incluida pelo autoload, instaciamos e armazenamos em meth */
		$Conexao = new Conexao();	
		$this->meth = $Conexao->conectar();
	}
	/* caso a imagem não seja caregada */
  	function exibe(){  		
			echo '<script type="text/javascript">alert("Informe a imagem");</script>';		
  	}
	
	/* Método responsável pelo redimensionamento */
	function redimensiona($tmp, $nome, $largura,$type,$marca=FALSE){
		/* se a extensão não estiver entre as permitidas da propriedade $permitido, não entrará nesse bloco */
		if(in_array($type, $this->permitido)){
			/* além de criar a pasta devemos chamar o nome dela */
			$pasta='uploads';
			/* se for jpg, JPG, jpeg ou JPEG, usaremos a função: imagecreatefromjpeg() */
			if((strtolower(substr($nome, -4)) == '.jpg') || strtolower(substr($nome, -5)) == '.jpeg'){						
				$img = imagecreatefromjpeg($tmp);
				$ext = 'jpg';
				/* damos o nome sem mexer na extensão */
				if((substr($nome, -5) == '.jpeg') || substr($nome, -5) == '.JPEG'){
					$nome = 'mp'.str_shuffle(substr(base64_encode($nome), 0, 10)).rand(0,888).substr($nome, -5);
				}else{
					$nome = 'mp'.str_shuffle(substr(base64_encode($nome), 0, 10)).rand(0,888).substr($nome, -4);
				}
				/* se for png ou PNG, usaremos a função: imagecreatefrompng() */
			}elseif((strtolower(substr($nome, -4)) == '.jpg')){
				$img = imagecreatefrompng($tmp);
				$ext = 'png';
				$nome = 'mp'.str_shuffle(substr(base64_encode($nome), 0, 10)).rand(0,888).substr($nome, -4);
			}				
			/* pegamos as dimensões da imagem carregada do X e Y */
	        $x      = imagesx($img);
	        $y      = imagesy($img);
			/* definimos a nova altura, baseada no produto da larguraNova pela larguraVelha dividida pela alturaVelha */
	        $altura = ($largura * $y) / $x;
			/* criamos a nova imagem baseada nesses dados */
	        $nova   = imagecreatetruecolor($largura, $altura);
			/* bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , 
			 * int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h ) */
	        imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);
			/* mesma coisa se for jpg ou png usaremos funções diferentes */
			if($ext == 'jpg'){
				if(imagejpeg($nova, "$pasta/$nome")){
					echo "Redimensionada com sucesso!<br />";
				}
			}elseif($ext == 'png'){
				if(imagepng($nova, "$pasta/$nome")){
					echo "Redimensionada com sucesso!<br />";
				}
			}
			/* se o checkbox marca dagua foi marcado, chamaremos o método para inserir a marca dagua */
			if($marca == TRUE){
				$this->marca($nova, $nome, $pasta, $img, $ext);
				/* se não, só gravamos no banco e destruimos a imagem velha e nova */
			}else{
				$this->gravar($nome);
		        imagedestroy($nova);
		        imagedestroy($img);			
			}
			/* caso seja enviado um arquivo com extensão diferente das permitidas */			
		}else{
			echo "Tipo não permitido.";
		}
	}
	/* inserir marca dagua */
	function marca($nova, $nome, $pasta, $img, $ext){
		/* criamos a imagem baseada numa imagem com a marca */
	  $marca = imagecreatefrompng('marca.jpg');
      $marcax   = imagesx($marca);
      $marcay   = imagesy($marca);
      imagecopyresampled($nova, $marca, 0, 0, 0, 0, 232, 47, $marcax, $marcay);
	  /* se anova imagem for jpg ou png, novamente definiremos as funçoes */
	  if($ext == 'png'){
	      if(imagepng($nova, "$pasta/$nome")){
	      	echo "Marca D'agua inserida com sucesso";
	      }	  	
	  }
	  
	  if($ext == 'jpg'){
	      if(imagejpeg($nova, "$pasta/$nome")){
	      	echo "Marca D'agua inserida com sucesso";
	      }	  	
	  }
	  /* armazenamos o nome na propriedade $nm e depois mandamos gravar no banco, pois ainda não gravamos, só seria gravado
	   * se não pedisse marca dagua também */
	  $this->nm = $nome;
      $this->gravar($nome);
	  /* depois disso destruimos */
      imagedestroy($nova);
	  imagedestroy($img);
	}
	/* gravamos na tabela do mysql para recuperamos dinamicamento o nome */
	function gravar($nome){
		$metodo = $this->meth;
		$sql = "INSERT INTO `img` SET `arquivo`=?";
		$query = $metodo->prepare($sql);
		if($query->execute(array($nome))){
			echo "<br />Gravado no banco com sucesso!";
		}
		
	}

  }
?>

Conexao.class.php

<?php
  /* Criando uma conexão com o banco de dados */
  class Conexao{
  	private $dns;
	private $usr;
	private $psw;
	private $pdo;
	
  	function conectar(){
  		if(is_null($this->pdo)){
	  		$this->dns = 'mysql:host=127.0.0.1;dbname=imagens';
			$this->usr = '';
			$this->psw = '';
			$this->pdo = new PDO($this->dns,$this->usr,$this->psw);  			
  		}
		return $this->pdo;

    }
  }
?>

É isso aê e até a próxima!



Sobre o Autor

Marcos Oliveira

A alegria está na luta, na tentativa, no sofrimento envolvido e não na vitória propriamente dita. A força não provém da capacidade física. Provém de uma vontade indomável.
Mahatma Gandhi


Dê você também uma Contribuição
Compartilhe nas suas Redes Sociais!




Inscreva-se no Nosso Canal do Youtube



Curso Extremamente Avançado em Shell Script Bash

Você irá descobrir técnicas avançadas de escrever em Shell Script. Como criar instaladores para distribuições Linux, Animações, Documentações, além de tudo sobre Processos em sistemas tipo UNIX, detalhes sobre Comandos Avançados e Muito Mais !




Crie Sua Própria Promoção

Customize seus Pacotes de Treinamentos obtendo descontos muito em conta!