Upload

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

[ Hits: 9.347 ]

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

Valor por extenso - PHP e ZF2

Cria gráficos para monitoramento de consumo de CPU e Memória a partir de arquivos [Atualização].

Monitoramento de processos - TOP

Tempo de Geracao da Pagina

Text4Shell


  

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