Ir para conteúdo
Fórum Script Brasil
  • 0

Upload De Imagem + Gerar Thumb


abobre

Pergunta

Boa noite,

Gostaria de pedir a ajuda de vocês com o script que encontrei na net para fazer upload de imagem.

O script ele faz apenas o upload da imagem e salva em uma pasta, eu gostaria de implementar no script uma função para gerar um thumb e salvar em outro pasta....

alguém pode me ajudar ?

Desde já agradeço a todos !!!

Segue o script:

<?php
/**
* Upload de Imagens com Segurança
*
* @author Alfred Reinold Baudisch
* @email alfred_baudisch@hotmail.com
* @date Jan 09, 2004
* @changes Jan 14, 2004 - v2.0
*/
// Prepara a variável caso o formulário tenha sido postado
$arquivo = isset($_FILES["foto"]) ? $_FILES["foto"] : FALSE;

$config = array();
// Tamano máximo da imagem, em bytes
$config["tamanho"] = 906883;
// Largura Máxima, em pixels
$config["largura"] = 2048;
// Altura Máxima, em pixels
$config["altura"] = 1536;
// Diretório onde a imagem será salva
$config["diretorio"] = "fotos/";

// Gera um nome para a imagem e verifica se já não existe, caso exista, gera outro nome e assim sucessivamente..
// Função Recursiva
function nome($extensao)
{
    global $config;

    // Gera um nome único para a imagem
    $temp = substr(md5(uniqid(time())), 0, 10);
    $imagem_nome = $temp . "." . $extensao;
    
    // Verifica se o arquivo já existe, caso positivo, chama essa função novamente
    if(file_exists($config["diretorio"] . $imagem_nome))
    {
        $imagem_nome = nome($extensao);
    }

    return $imagem_nome;
}

if($arquivo)
{
    $erro = array();
    
    // Verifica o mime-type do arquivo para ver se é de imagem.
    // Caso fosse verificar a extensão do nome de arquivo, o código deveria ser:
    //
    // if(!eregi("\.(jpg|jpeg|bmp|gif|png){1}$", $arquivo["name"])) {
    //      $erro[] = "Arquivo em formato inválido! A imagem deve ser jpg, jpeg, bmp, gif ou png. Envie outro arquivo"; }
    //
    // Mas, o que ocorre é que alguns usuários mal-intencionados, podem pegar um vírus .exe e simplesmente mudar a extensão
    // para alguma das imagens e enviar. Então, não adiantaria em nada verificar a extensão do nome do arquivo.
    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";
        }
    }

    if(!sizeof($erro))
    {
        // Pega extensão do arquivo, o indice 1 do array conterá a extensão
        preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);
        
        // Gera nome único para a imagem
        $imagem_nome = nome($ext[1]);

        // Caminho de onde a imagem ficará
        $imagem_dir = $config["diretorio"] . $imagem_nome;

        // Faz o upload da imagem
        move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
    }
}
?>
<html>
<head>
<title>Enviar Foto</title>
<style type="text/css">
BODY, TD {font-family: verdana; font-size: 10pt; color: white}
</style>
</head>

<body bgcolor=black link=red vlink=red alink=red>

<center><font size=4>Envio de Foto</font><BR>
<?
// Imagem foi enviada com sucesso, mostra mensagem de SUCESSO
if($arquivo && !sizeof($erro))
{
    echo "<img src=\"" . $imagem_dir . "\" width=200 height=200 border=0><BR><BR>Sua foto foi enviada com sucesso!<br>Deseja enviar outra? <a href=\"foto.php\">Clique aqui</a>";
}
// Ocorreu algum erro ou ainda o formulário não foi postado
else
{
?>
<form action="<?echo $PHP_SELF?>" method=post  ENCTYPE="multipart/form-data">
Envie sua foto em formato gif, jpg, bmp ou png.<BR>
A imagem não deve ter mais que <? echo $config["tamanho"] ?> bytes e deve ter <? echo $config["largura"] . "x" . $config["altura"] ?> pixels.<BR>
<table border=0 cellpadding=2 cellspacing=1 align=center>
<?
if(sizeof($erro))
{
    echo "<tr><td colspan=2 bgcolor=red><B><U>Ocorreu(am) o(s) seguinte(s) erro(s):</u><BR>";
    foreach($erro as $err)
    {
        echo " - " . $err . "<BR>";
    }
    echo "</B></td></tr>";
}
?>
<tr><td align=center>Enviar Foto: <input type=file size=30 name=foto></td></tr>
<tr><td align=center><input type=submit value="Ok!"></td></tr>
</table>
</form>
<? } ?>
<br><font face=arial size=1 color=white>Programado por Alfred R. Baudisch - 14/01/2004. Versão 1.2</font>
</body>
</html>

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bom.. um que sempre funciona comigo.

Não fui eu quem desenvolvi a parte que mexe com o tratamento das imagens.. Mas a partir dessa parte eu fiz a função, adicionando os parametros CAMINHO e QUALIDADE.

function CriarImagem($Arquivo, $LarguraN, $AlturaN, $Caminho, $Qualidade=''){
    list($largura,$altura) = getimagesize($Arquivo['tmp_name']);
    if($LarguraN > $largura){ $LarguraD = $largura; }
    else { $LarguraD = $LarguraN; }
    if($AlturaN > $altura){ $AlturaD = $altura; }
    else { $AlturaD = $AlturaN; }
    $redim = imagecreatetruecolor($LarguraD,$AlturaD);
    if($Arquivo['type']=='image/png'){
        $original = @imagecreatefrompng($Arquivo['tmp_name']);
    }
    elseif($Arquivo['type']=='image/gif'){
        $original = @imagecreatefromgif($Arquivo['tmp_name']);
    }
    else{
        $original = @imagecreatefromjpeg($Arquivo['tmp_name']);
    }
    if($Qualidade==''){
        $Qualidade = 100;
    }
    @imagecopyresized($redim, $original, 0, 0, 0, 0, $LarguraD, $AlturaD, $largura, $altura);
    @imagejpeg($redim,$Caminho,$Qualidade);
    @imagedestroy($redim);
}
Exemplo de uso: $Arquivo: Variável do arquivo. Ex: $_FILES['foto'] $LarguraN: "N" = Nova, ou seja, "Largura Nova", a largura que você deseja redimensionar. Ex: 200 $AlturaN: Mesma coisa da largura, só que agora com altura. Ex: 200 $Caminho: Caminho para onde a imagem redimensionada irá - incluindo o nome do arquivo. Ex: fotos/foto.jpg $Qualidade: de 0 a 100. Qualidade da imagem redimensionada (% - baseando-se na imagem original). Ex: 80. (Parâmetro opcional. Se em branco, qualidade = 100). Então, você querendo redimensionar uma imagem qualquer (que venha da variável $_FILES['foto'], por ex.) para um thumb de 120x60, que deverá ser salvo na com o nome de 2.jpg na subpasta fotos, reduzindo a qualidade da imagem para 80%, deve usar:
CriarImagem($_FILES['foto'], 120, 60, 'fotos/2.jpg',80);

Procure saber mais sobre as funções utilizadas aí, para entender como tudo funciona.

Editado por Clenisson
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...