PHP

PHP: Função para redimensionar arquivos de foto

Bem galera, mais um post surgindo na área.

Função simples e prática para redimensionamento de fotos. O redimensionamento é feito tendo como base os valores definidos nas variáveis $largura_max e $altura_max.

O valor definido nestas variáveis corresponde a altura e largura máxima da imagem.

A largura máxima permitida será de 800px e a altura máxima de 630px.

upload.php

<?
if ( isset( $_POST['submit'] ) ){   
   $pasta = 'uploads';
   $file = $_FILES['arquivo'];
   $temp = $file['tmp_name'];
   $filename = $file['name'];
 
   $largura_max	= 800;
   $altura_max	= 630;
   // arquivo que contém a função
   require ('redimensiona_fotos.php');
   // funcao que redimensionará a imagem
   // o retorno da função é o nome do arquivo 
   $result = upload($temp, $filename, $largura_max, $altura_max, $pasta);
   // gravando nome do arquivo no banco de dados
   $insert = mysql_query("INSERT INTO nome_tabela (arquivo_imagem) VALUES ('".$result."')");
}
?>
<form action="" method="post" enctype="multipart/form-data">
   <label for="arquivo">Arquivo:</label>
   <input type="file" name="arquivo" id="arquivo" /> 
   <br />
   <input type="submit" name="submit" value="Enviar" />
</form>

redimensiona_fotos.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?
   function upload($tmp, $arquivo, $max_x, $max_y, $pasta){
   //$max_x = 800 $max_y = 630
   $img		= imagecreatefromjpeg($tmp);
   $original_x	= imagesx($img); //largura
   $original_y	= imagesy($img); //altura
   $diretorio	= $pasta."/".$arquivo;
   // verifica se a largura ou altura da imagem é maior que o valor
   // máximo permitido
   if ( ( $original_x > $max_x ) || ( $original_y > $max_y ) ){
	// verifica o que é maior na imagem, largura ou altura?
        if ( $original_x > $original_y ) {	
		$max_y	= ( $max_x * $original_y ) / $original_x;
	}else{
		$max_x	= ( $max_y * $original_x ) / $original_y;
	}
	$nova = imagecreatetruecolor($max_x, $max_y);
	imagecopyresampled($nova, $img, 0, 0, 0, 0, $max_x, $max_y, $original_x, $original_y);
	imagejpeg($nova, $diretorio);
	imagedestroy($nova);
	imagedestroy($img);
   // se for menor, nenhuma alteração é feita 
   }else{
	imagejpeg($img, $diretorio);
	imagedestroy($img);
   }
   return($arquivo);
}
?>

16 thoughts on “PHP: Função para redimensionar arquivos de foto

  • Sandro Trudes

    Show de bola o script, funcionou direitinho, parabéns pelo post.

    Resposta
    • Olá Pedro.

      Fiz uma pequena alteração no script para explicar como inserir no banco de dados.

      A função upload retorna o nome do arquivo;
      Para pegar este valor, basta inserir o resultado em um variável e depois utilizá-la no comando insert.

      Resposta
        • Olá Leonardo.

          O código do post está bem explicado. Basta copiar todo o código para seu servidor web xapp, wampp e fazer os testes.

          Seleciona uma imagem com dimensões maiores que 800 x 630px para que sua foto seja diminuída.

          Abraço

          Resposta
          • Consegui Tiago obrigado! Estou tentando adaptar com a extensão png mas não estou conseguindo, você me ajuda?

          • Fala Leonardo.

            Faça as seguintes mudanças:

            linha 4: muda $img = imagecreatefromjpeg($tmp); para $img = imagecreatefrompng;
            linhas 19 e 24: muda imagejpeg($nova, $diretorio); para imagepng($nova, $diretorio);

  • Anderson Morais

    Muito bom o código, quebrou um galhão, vlw!

    Resposta
  • Carlos

    porque o script não está aceitando png?

    Resposta
    • Fala Carlos.

      Realmente, o script só contempla jpg.

      Teria que adaptar para PNG e GIF.

      Resposta
    • Olá Evaldo.

      Nos comentários tem uma solução para imagens png.

      Att.

      Resposta
  • Everson

    Olá, muito bom o script, funciona perfeitamente. Ao salvar a imagem ele prioriza a largura da imagem, tem como priorizar a altura?

    Resposta
    • Fala Everson,

      basta inverter as linhas – está assim:

      if ( $original_x > $original_y ) {	
        $max_y = ( $max_x * $original_y ) / $original_x;
      }else{
        $max_x = ( $max_y * $original_x ) / $original_y;
      }

      mude para:

      if ( $original_x > $original_y ) {	
         $max_x = ( $max_y * $original_x ) / $original_y;
      }else{
         $max_y = ( $max_x * $original_y ) / $original_x;
      }
      Resposta
  • Rafael Canuto

    Olá, bom dia…
    Acompanho sempre o conteúdo e vocês são excelentes programadores…
    porém vendo essa publicação aqui, notei que na hora que eu rolo a página a imagem sobrepõe o menu…
    não sei se perceberam, mas é só para avisar uahauah
    obs: Também sou programador hehe

    Resposta
    • Fala Rafael,

      Ficamos muito feliz em saber que curte nosso conteúdo.

      Agradecemos pelo aviso. Vamos verificar como resolver.

      Forte abraço.

      Resposta

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *