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);
}
?>

10 comentários em “PHP: Função para redimensionar arquivos de foto

  • 27 de dezembro de 2011 em 11:34
    Permalink

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

    Resposta
    • 13 de janeiro de 2013 em 9:12
      Permalink

      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
        • 23 de outubro de 2017 em 11:43
          Permalink

          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
          • 31 de dezembro de 2017 em 11:12
            Permalink

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

          • 15 de janeiro de 2018 em 9:36
            Permalink

            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);

  • 18 de setembro de 2017 em 13:12
    Permalink

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

    Resposta
  • 20 de setembro de 2017 em 13:53
    Permalink

    porque o script não está aceitando png?

    Resposta
    • 26 de setembro de 2017 em 16:09
      Permalink

      Fala Carlos.

      Realmente, o script só contempla jpg.

      Teria que adaptar para PNG e GIF.

      Resposta

Deixe uma resposta

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