Ir para conteúdo

POWERED BY:

Arquivado

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

Hugo Borges_120734

redimensionar imagem no upload com php

Recommended Posts

Galera, tenho um arquivo que montei em php, para fazer o upload de imagens no meu site.

 

Queria saber se alguém sabe o que devo fazer para ele redimensionar a imagem. Queria manter este código igual. algum poderia me ajudar?

<?php
    
  // Verifica se existir o arquivo (Foto)
  if(isset($_FILES["imagem"])){
	
   $arquivo = $_FILES["imagem"];
   $tamanho =  $arquivo['size'];
   $arrArquivo = explode('.',$arquivo['name']); // Tranforma em array o nome do arquivo
   $fileExtencion = trim($arrArquivo [count($arrArquivo )-1]); // Obtem a extensão do arquivo
   $arrExtPermitidas = array('JPG', 'GIF', 'PNG'); // Array com as extensões permitidas
   
   // Se o arquivo nao existir
   if ( $fileExtencion != ''){
    // Caso a extensão não for permitida
    if(!in_array(strtoupper($fileExtencion),$arrExtPermitidas)){
     echo "<script>alert('$texto80'); history.back();</script>";
     exit();
    }
   }
   
   // Gera um identificador único para o arquivo
   $nomeDoArquivo = md5(uniqid(rand(), true));
   // Diretorio dos arquivos
   $pasta_dir = "../../Arquivos/Upload/";
   // Definindo o destino do arquivo
   $arquivo_nome = $pasta_dir . $nomeDoArquivo . '.' . $fileExtencion;
   // Faz o upload da imagem
   move_uploaded_file($arquivo["tmp_name"], $arquivo_nome);
   
   // Se o arquivo nao existir
   if ( $fileExtencion != ''){
	   
	// Deleta foto antiga
     unlink('../../Arquivos/Upload/'.$resultado_conf->logo);
	
    $imagem = $nomeDoArquivo . '.' . $fileExtencion;
	
   }else{
	$imagem = $resultado_conf->logo;
   }
  }
 ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A pouco tempo atrás eu programei essa classe, vê se te serve de base.

<?php

/*
 * Classe para manipulação de imagens
 * @author: CL4nG
 * @version: 1.0
 * @date 10/06/2014
 *
 * Requerido: PHP 5 e GD Library
 *
 * updates:
 *  @author:
 *  @date:
 *  @description:
 *
 */

class Image {
    #code
    
    private $width = 320; //default 320
    private $height = 240; //default 240
    private $mimeType;
    private $image;
    private $imageResized;
    
    /* Array com tipos de imagens suportadas */
    private $mimeTypesSupported = array
    (
        'image/gif',
        'image/jpeg',
        'image/png'
    );
    
    /* Redimensiona uma imagem. */
    public function resize($filename = null, $new_width = '320', $new_height = '240')
    {
        if (!$filename)
            throw new Exception('<pre><b>Error [resize]:<b> Filename is required!</pre><br>');
        
        $this->_getMimeType($filename);
        $this->_openImage($filename);
        $this->_getImageSize();
        
        /* Cria uma imagem com os tamanhos informados */
        $this->imageResized = imagecreatetruecolor($new_width, $new_height);
        imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->width, $this->height);
        return $this->image;
    }
    
    
    /* Salva imagem que está na memória para arquivo */
    public function saveImage($filename, $quality = '100')
    {
        $ext = strtolower(strchr($filename, '.'));
        
        switch ($ext)
        {
            case '.png':
                if (imagetypes() & IMG_PNG)
                imagepng($this->imageResized, $filename);
            break;
            case '.jpg':
                if (imagetypes() & IMG_JPG)
                    imagejpeg($this->imageResized, $filename, $quality);
            break;
            case '.gif':
                if (imagetypes() & IMG_GIF)
                    imagegif($this->imageResized, $filename);
            break;
            default:
                throw new Exception('<pre><b>Error [saveImage]:</b> Extension not supported!</pre><br>');
            break;
        }
       
        imagedestroy($this->image);
    }
    
    /* Cria uma nova imagem e adiciona em $this->image o identificador da imagem */
    private function _openImage($filename)
    {
        $this->image = null;
        
        switch($this->mimeType)
        {
            case 'image/png':
                $this->image = imagecreatefrompng($filename);
            break;
            case 'image/jpeg':
                $this->image = imagecreatefromjpeg($filename);
            break;
            case 'image/gif':
                $this->image = imagecreatefromgif($filename);
            break;
            default:
            break;
        }
        
        if (!$this->image)
            throw new Exception('<pre><b>Error [openImage]:<b> Failed to open '.$filename.'</pre><br>');
    }
    
    /* Obtém o mimetype da imagem e verifica se o tipo é suportado. */
    private function _getMimeType($filename)
    {
        $this->mimeType = null;
        $img = getimagesize($filename);
        
        if (isset($img['mime']))
            $this->mimeType = $img['mime'];
        else
            throw new Exception('<pre><b>Error [_getMimeType]:<b> Failed to get image type.<pre><br>');
        
        if (!in_array($this->mimeType, $this->mimeTypesSupported))
        {
            $this->mimeType = null;
            throw new Exception('<pre><b>Error [_getImageSize]:<b> This file not supported!</pre><br>');
        }
    }
    
    /*
     * Obtém a largura e altura da imagem e seta os valores nos atributos.
     * image é o identificador da imagem aberta pelo método $this->_openImage. 
     */
    private function _getImageSize()
    {
        $this->width    = imagesx($this->image);
        $this->height   = imagesy($this->image);
    }
    
    
    /*
     * Faz vários uploads de imagens
     * 
    */
    public function upload($savePath, $max = 1)
    {
        
    }
}


/* Exemplo de uso: */
$Image = new Image();
$Image->resize('perfil.png', 150, 140);
$Image->saveImage('xd.png');
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother vou te dar uma solução alternativa, que é te explicar como se faz para redimensionar uma imagem sem distorcer ela e sem utilizar classe, assim vc sempre vai poder usar nos seus códigos. Bom é seguinte:

 

Primeiro vc precisa abrir a imagem que vc deseja redimensionar, ela pode vir de um upload ou até mesmo do banco de dados, vc vai precisar criar uma nova imagem à partir dela, logo vc tera que utilizar a seguinte função:

 

$img_origem = ImageCreateFromJpeg("imagem_que_vai_redimensionar.jpg");

 

Logo depois vc precisa encontrar os tamanhos da largura e da altura em pixels da imagem que vai ser redimensionada, vc vai usar 2 funções imagesx() e imagesy() para conseguir as dimensões do eixo x e y da imagem, ficando assim:

 

$largura = imagesx($img_origem);

$altura = $imagey($img_origem);

 

Agora pra vc conseguir redimensionar sem distorcer, aqui esta o segredo, a regra de 3; Vc irá escolher a nova largura e aplicar a regra de 3 utilizando a altura, nova largura e largura da imagem antes de ser redimensionada para descobrir uma altura que não irá distorcer sua imagem, então vai ficar assim:

 

$nova_largura = 200;

$nova_altura = $altura*$nova_largura/$largura;

 

Agora vc tem que criar uma nova imagem em branco com as novas larguras, que é exatamente a imagem onde vc vai carimbar a sua imagem redimensionada. Ficando assim:

 

$img_destino = imagecreatetruecolor($nova_largura, $nova_altura);

 

Agora vamos utilizar uma função que vai carimbar a imagem de origem na nossa imagem de destino ja redimensionada, esta função possui diversos parâmetros. A função é imagecopyresampled(); e vc pode aprender mais sobre ela aqui http://php.net/manual/pt_BR/function.imagecopyresampled.php

Bom vai ficar assim:

 

imagecopyresampled($img_destion,$img_orige,0,0,0,0,$nova_largura,$nova_altura,$largura,$altura);

 

Agora é só vc salvar a imagem em algum lugar com a função imageJPEG(); ficando assim:

 

imageJPEG($img_destion,'./novo-nome.jpg',85);

 

Este último parâmetro "85" é o fator de compressão ele varia de 10 a 100.

 

Qualquer dúvida fala ai ;)

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim ela serve sim, porem não estou sabendo como fazer para ela redimencionar a imagem antes de salvar.

$Image = new Image();

$Image->resize('perfil.png', 150, 140);

$Image->saveImage('xd.png');

 

Só observar o código do método resize.

O redimensionamento ocorre nessas duas linhas:

 

$this->imageResized = imagecreatetruecolor($new_width, $new_height);
        imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->width, $this->height);
        return $this->image;

A imagem redimessionada fica na memória até que você a salve no disco.

Mas não é preciso salvá-la para ver o resultado.

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.