Um recurso muito interessante na programação de site é o upload de imagens para o servidor php para sites de imobiliárias, galeria de fotos, imagem de perfil entre muito outros site que utilizam sistemas de imagens.
O maior problema dessa sistema é o tamanho e qualidade das imagens, hoje vou postar aqui um simples tutorial que funciona perfeitamente para realizar upload da imagem e tratar suas caracteriscas com facilidade.
Primeiro temos que criar o arquivo do formulário que vai enviar a foto para o arquivo php que processa o armazenamento
Arquivo foto.php
<form action=”add-foto.php” method=”post” encType=”multipart/form-data”>
<input id=”imagem”>
<input value=”Enviar”>
</form>
Nada de novidade pra quem já conhece HTML, esse código é um simples formulário que tem um campo de imagem e um botão de envio, o suficiente para entender o tutorial. Vejamos o arquivo add-foto.php – PS: Esse arquivo eu usei em um dos meus projetos estou a compartilhar pelo fato de estar em falta alguns scripts, construi esse script a partir de alguns códigos e classes que encontrei. Nesse caso é um update para site de fotos pessoais.
Arquivo add-foto.php
<?
// essa função é muito importante pois é responsável por redimencionar a imagem caso ela seja maior que o estipulado pelo administrador do site ( valor que será definido mais abaixo em variaveis ). Não vou falar muito da função pois não seu especialista em fotos e imagens com php e também deixaria o tutorial muito grande, apenas não deixe nada de fora.
function redimensiona_imagem($origem,$destino,$maxlargura=100,$maxaltura=100,$qualidade=80)
{
if(!strstr($origem,”http”) && !file_exists($origem))
{
echo(“Arquivo de origem da imagem inexistente”);
return false;
}
$ext = strtolower(end(explode(‘.’, $origem)));
if($ext == “jpg” || $ext == “jpeg”)
{
$img_origem = @imagecreatefromjpeg($origem);
}
elseif ($ext == “gif”)
{
$img_origem = @imagecreatefromgif($origem);
}
elseif ($ext == “png”)
{
$img_origem = @imagecreatefrompng($origem);
}
if(!$img_origem)
{
echo(“Erro ao carregar a imagem, talvez formato nao suportado”);
return false;
}
$alt_origem = imagesy($img_origem);
$lar_origem = imagesx($img_origem);
$escala = min($maxaltura/$alt_origem, $maxlargura/$lar_origem);
if($escala < 1)
{
$alt_destino = floor($escala*$alt_origem);
$lar_destino = floor($escala*$lar_origem);
// Cria imagem de destino
$img_destino = imagecreatetruecolor($lar_destino,$alt_destino);
// Redimensiona
imagecopyresampled($img_destino, $img_origem, 0, 0, 0, 0, $lar_destino, $alt_destino, $lar_origem, $alt_origem);
imagedestroy($img_origem);
}
else
{
$img_destino = $img_origem;
}
$ext = strtolower(end(explode(‘.’, $destino)));
if($ext == “jpg” || $ext == “jpeg”)
{
imagejpeg($img_destino,$destino,$qualidade);
return true;
}
elseif ($ext == “gif”)
{
imagepng($img_destino,$destino);
return true;
}
elseif ($ext == “png”)
{
imagepng($img_destino,$destino);
return true;
}
else
{
echo(“Formato de destino nao suportado”);
return false;
}
}
$pasta_fotos = “imagens/” //pasta onde armazena as fotos
$tamanho_arquivos = 1000000; //tamanho Maximo da imagem em bytes
$largura_max = 1024; //width máxima que a foto pode ter
$altura_max = 2048; //heigth máxima que a foto pode ter
$qualidade_foto_nova=80; //qualidade da nova imagem
$url_erro = “http://seusite.com.br/404.php”; //pagina que redireciona caso ocorra algum erro
$foto_type = $_FILES['imagem']['type']; //recebe o tipo da foto
$foto_size = $_FILES['imagem']['size']; // recebe o tamanho da foto
$arqTemp = $_FILES['imagem']['tmp_name']; //recebe o arquivo temporario da foto
$nome_foto = $_FILES['imagem']['name']; //recebe o nome da foto
//Explicadas as variáveis vamos as funcionalidades!
if ($foto_size > 0)
{
if($foto_type <> ‘image/gif’ && $foto_type <> ‘image/jpeg’ && $foto_type <> ‘image/png’)
{
echo “<script> alert(‘Tipo de arquivo inválido!’);window.location=’$url_erro’;</script>”;
}
else
{
if($foto_size > $tamanho_arquivos)
{
echo “<script> alert(‘O tamanho do arquivo é maior do que o esperado !’);window.location=’$url_erro’;</script>”;
}
}
}
//primeiro ele checa se a foto tem tamanho maior que 0 se sim ele checa o tipo da foto e se for ok ele checa se a foto tem tamanho maior que o limite. Se falso as verificações ele gera o erro com javascript e já redireciona impedindo a conclusão do script
//depois das verificações Ok
$novo_nome = time().”_”.$nome_foto; // gera um novo nome da foto para evitar duplicidade
$destino = $pasta_fotos.”/”.$novo_nome; // gera o destino exato da foto no servidor
$status = move_uploaded_file($arqTemp,$destino); // aqui se passa o mais importante, essa função é a responsável pelo update
// nesse próximo IF checa-se se a resposta do $status foi verdadeira, ou seja, se foi upado. Se sim chama a função que se encarrega de redimencionar a imagem proporcionalmente ( não vou falar dela hoje pois ficaria enorme o tópico) e então depois de redimencionar a imagem a função retorna concluido ou não , se sim a variável final recebe o texto para ser exibe como mensagem de conclusão se não $final recebe mensagem de erro. Se caso a verificação da variável $status seja falso( a função _uploaded_file($arqTemp,$destino) não upou ) a variável final recebe o erro que não foi upado exibe o erro e redireciona para a pagina de erro.
if($status)
{
$resposta = redimensiona_imagem($destino,$destino,$largura_max,$altura_max,$qualidade_foto_nova);
if ($resposta)
{
$final = “Arquivo “.$nome_foto.” enviado com Sucesso”;
}
else
{
$final = “Ocorreu Algum erro ao preparar a imagem: “.$nome_foto.” para: “.$pasta_fotos;
}
}
else
{
$erro_upload = “Ocorreu algum erro no Upload da Imagem por favor tem novamente!”;
echo “<script>alert(‘$erro_upload’);window.location=’$url_erro’;</script>”;
}
//caso ocorra tudo certo a ultima instrução é executada exibindo o ocorrido na em uma caixa de mensagem.
echo “<script>alert(‘$final’);window.location=’$url_erro’;</script>”;
?>
Bom pessoal é isso, estou usando esse script e está funcionando perfeitamente sem problemas algum. Se alguém tiver alguma duvida estou a disposição para ajudar a desenvolver e aprimorar mais e também deixo qualquer pessoa utilizar totalmente o script somente me avise de melhoras para implementar no post mais tarde.
Meu E-mail é fernandocesar226@hotmail.com ou mesmo comente aqui no meu blog .
loading...