Upload

Publicado por João Pinto Neto 13/06/2007

[ Hits: 9.332 ]

Homepage: http://joaopintoneto.com/

Download upload.php




Esse script faz upload da imagem, redimenciona, coloca marca d'agua e gera thumbnail.

  



Esconder código-fonte

<?php
/************
Formulario para enviar a foto
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>UPLOAD DE FOTO</title>
</head>

<body>

<form action="upload.php" method="post"  enctype="multipart/form-data">
Envie sua foto para o site! <input type="file" name="foto"><BR>
<input type="submit" value="Enviar Foto!">
</form>

</body>
</html>
************/


// configuração

set_time_limit(300);

// taxa de compressão do JPEG
$tx_compressao = 80;

// imagem com logomarca e marca d`água
$arq_marca_h = './imagens/marcah.png';
$arq_marca_v = './imagens/marcav.png';

// procentagem do tamanho para imagem de thumbnail
$per_thumb = 20;

// correção de gamma de cores
$tx_correcao = 1.5;

// pasta de origem, onde o script vai carregar as imagens originais
$dir = "./fotos";

// pasta de destino, onde o script vai gravar as imagens geradas
$dst = "./fotos";

// prefixo das imagens do thumbnail
$pre_thumb = "tn";

// calcula e informa o tamanho do thumbail
function detecta_tamanho_thumbnail($img) {
   global $per_thumb;
   $vetor[0] = floor((imagesx($img)*$per_thumb)/100);
   $vetor[1] = floor((imagesy($img)*$per_thumb)/100);

   return $vetor;
}

// calcula e informa o tamanho da foto para visualização
function detecta_tamanho_visualiza($img) {
   $vetor[0] = imagesx($img);
   $vetor[1] = imagesy($img);

   return $vetor;
}

// função para processos graficos da foto.
function criafoto($arquivo) {

   global $tx_compressao, $tx_correcao, $arq_marca_h, $arq_marca_v, $dir, $dst, $pre_thumb;

   // carrega foto original
   $foto = imagecreatefromjpeg("$dir/$arquivo");

   // determina o posicionamento da foto, vertical ou horizontal
   if (imagesx($foto) > imagesy($foto)) {
      // imagem da marca horizontal
      $marca = imagecreatefrompng("$arq_marca_h");
   } else {
      // imagem da marca vertical
      $marca = imagecreatefrompng("$arq_marca_v");
   }

   // carrega o tamanho da imagem para visualização
   $tamV = detecta_tamanho_visualiza($marca);

   // captura o tamanho da imagem para thumbnail
   $tamT = detecta_tamanho_thumbnail($marca);

   // transparencia, para o exemplo, o fundo da imagem marca.png deve ser branco
   imagecolortransparent($marca, imagecolorallocate($marca, 0, 225, 0));

   // gera imagens que resultarão na imagem final
   $final = imagecreatetruecolor($tamV[0], $tamV[1]);
   $thumb = imagecreatetruecolor($tamT[0], $tamT[1]);

   // copia o conteudo da imagem original para o imagem resultado final
   imagecopyresampled($final, $foto, 0, 0, 0, 0, $tamV[0], $tamV[1], imagesx($foto), imagesy($foto));

   // aplica correção de gamma (brilho e contraste)
   imagegammacorrect($final, 0.9, $tx_correcao);

   // coloca a marca d`água
   imagecopyresampled($final, $marca, 0, 0, 0, 0, $tamV[0], $tamV[1], $tamV[0], $tamV[1]);

   // gera thumbnail a partir da imagem final
   imagecopyresampled($thumb, $final, 0, 0, 0, 0, $tamT[0], $tamT[1], $tamV[0], $tamV[1]);

   // gera foto na pasta destino
   imagejpeg($final, "$dst/$arquivo", $tx_compressao);

   // gera thumbnail na pasta destino
   imagejpeg($thumb, "$dst/$pre_thumb$arquivo", $tx_compressao);
}


//----------------------------------------------------------------------------------------
//--------------------------
//------------

$erro = $config = array();

// Prepara a variável do arquivo
$arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE;

// Tamanho máximo do arquivo (em bytes)
//$config["tamanho"] = 1068830;
$config["tamanho"] = 1024 * 100 * 10;
// Largura máxima (pixels)
$config["largura"] = 1280;
// Altura máxima (pixels)
$config["altura"]  = 960;

// Formulário postado... executa as ações
if($arquivo)
{  
    // Verifica se o mime-type do arquivo é de imagem
    if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"]))
    {
        $erro[] = "Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Envie outro arquivo";
    }
    else
    {
        // Verifica tamanho do arquivo
        if($arquivo["size"] > $config["tamanho"])
        {
            $erro[] = "Arquivo em tamanho muito grande! 
      A imagem deve ser de no máximo " . $config["tamanho"] . " bytes. 
      Envie outro arquivo";
        }
        
        // Para verificar as dimensões da imagem
        $tamanhos = getimagesize($arquivo["tmp_name"]);
        
        // Verifica largura
        if($tamanhos[0] > $config["largura"])
        {
            $erro[] = "Largura da imagem não deve 
            ultrapassar " . $config["largura"] . " pixels";
        }

        // Verifica altura
        if($tamanhos[1] > $config["altura"])
        {
            $erro[] = "Altura da imagem não deve 
            ultrapassar " . $config["altura"] . " pixels";
        }
    }
    
    // Imprime as mensagens de erro
    if(sizeof($erro))
    {
        foreach($erro as $err)
        {
            echo " - " . $err . "<BR>";
        }

        echo "<a href=\"foto.htm\">Fazer Upload de Outra Imagem</a>";
    }

    // Verificação de dados OK, nenhum erro ocorrido, executa então o upload...
    else
    {
        // Pega extensão do arquivo
        preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);

        // Gera um nome único para a imagem
        $imagem_nome = uniqid(time()) . "." . $ext[1];

        // Caminho de onde a imagem ficará
        $imagem_dir = "./fotos/" . $imagem_nome;

        // Faz o upload da imagem
        move_uploaded_file($arquivo["tmp_name"], $imagem_dir);

        criafoto($imagem_nome);

        echo "Sua foto foi enviada com sucesso!";
    }
}
?>

Scripts recomendados

Calsse eveFile: manipulação de arquivos

Classe de Internacionalização(Multi linguagens)

Validação de CPF usando PHP

Controle de Estoque Evolution

Monitoramento simples de servidores [versão 1.0]


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts