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); } ?> |
Show de bola o script, funcionou direitinho, parabéns pelo post.
Como fazer um insert no bd?
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.
como fazer isto?
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
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);
Muito bom o código, quebrou um galhão, vlw!
porque o script não está aceitando png?
Fala Carlos.
Realmente, o script só contempla jpg.
Teria que adaptar para PNG e GIF.
e ai galera, estou esse script mas as imagens png esta saindo com o fundo preto.
Olá Evaldo.
Nos comentários tem uma solução para imagens png.
Att.
Olá, muito bom o script, funciona perfeitamente. Ao salvar a imagem ele prioriza a largura da imagem, tem como priorizar a altura?
Fala Everson,
basta inverter as linhas – está assim:
mude para:
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
Fala Rafael,
Ficamos muito feliz em saber que curte nosso conteúdo.
Agradecemos pelo aviso. Vamos verificar como resolver.
Forte abraço.