Upload
Publicado por João Pinto Neto 13/06/2007
[ Hits: 9.676 ]
Homepage: http://joaopintoneto.com/
Esse script faz upload da imagem, redimenciona, coloca marca d'agua e gera thumbnail.
<?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!";
}
}
?>
Receber atualização de encomendas do correios em seu e-mail
Cria gráficos para monitoramento de consumo de CPU e Memória a partir de arquivos [Atualização].
Monitoramento simples de servidores [versão 1.0]
Previsão do tempo para Porto Alegre/RS
Menu Dinamico (PHP + MySQL) - 5 niveis
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Opções secretas em tema do Cinnamon
Como mapear unidade de rede no Linux
Como quebrar senha usando john the ripper
Alguém pode me indicar um designer freelancer? [RESOLVIDO] (1)
Alguém já testou o novo COSMIC Desktop? O que achou? (4)
Não consigo instalar distro antiga no virtualbox nem direto no hd (29)
queria saber como posso alterar a frequencia do meu ryzen 2300u pro (3)









