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

(Resolvido) Upload com redimensionamento de imagem.


felini

Pergunta

Boa noite pessoas.

Estou com um problema pra fazer o upload com redimensionamento da imagem que faço o upload.

Na real, a imagem, é enviada pro servidor, tudo corretamente, porém quando faz o redimensionamento da imagem, a imagem é fica do tamanho que escolhi, mas preta! Já a do upload que não é mexida, sobe normal pra pasta especificada.

Segue abaixo o script.

$imagem = $_FILES['arquivotp']['name'];

    //Define a Largura e a Altura
    $largura = 200;
    $altura = 160;

    //Nome do arquivo redimensionado
    $imagem_gerada = explode(".", $imagem);

    //pegamos o conteudo do array e concatenamos com novo.jpg
    $imagem_gerada = $imagem_gerada[0] ."_novo.jpg";

    //criamos uma nova imagem ( que vai ser a redimensionada) a partir da imagem original
    $imagem_orig = ImageCreateFromJPEG($imagem);

    //pega a altura e a largura da imagem original
    $pontoX = ImagesX($imagem_orig);
    $pontoY = ImagesY($imagem_orig);

    //Criamos a imagem redimensionada com a funcao ImageCreateTrueColor para suportar um grande numero de cores
    $imagem_fin = ImageCreateTrueColor($largura, $altura);

    //copiamos o conteudo da imagem original e passamos para o espaco reservado a redimencao
    ImageCopyResampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY);

    //Salva a imagem
    ImageJPEG($imagem_fin, $imagem_gerada);

    //Libera a Memoria
    ImageDestroy ($imagem_orig);
    ImageDestroy ($imagem_fin);

Inclusive, peque esse script aqui do fórum, ele funcionou a primeira vez, mas quando adaptei da forma que eu precisava, parou de funcionar! Sabe se alguma função em específica deve estar ativada no servidor?

[]s

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Olá...

Pelo o que estou notando, tu estás pegando o nome do arquivo e não o caminho completo dele, ou seja:

$imagem = $_FILES['arquivotp']['name'];
$imagem recebe o nome do arquivo uploaded, algo como 'foto.jpg'
$imagem_orig = ImageCreateFromJPEG($imagem);

$imagem_orig recebe um ponteiro para 'foto.jpg' mas ela não está no vetor $_FILES lá no TEMP ainda?

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0

Na real, ela origina de um formulário que criei. Vou colar o script completo aqui para melhor entendimento!

include "conecta_prod.inc";
    $radiobotton = $_POST["opcaotp"];
    
    if($radiobotton==0){echo "<p align=center>Por favor, escolha entre <b>incluir</b> ou <b>excluir</b>.<br>
    <a href=index.html>Voltar</a></p>";}
    
    // Inicia Função de INCLUSÃO    
    if ($radiobotton==1){
        
    $refer = $_POST["ref"];
    $preço = $_POST["preço"];
    $produto = $_POST["produto"];
    $desc = $_POST["desc"];
    $composicao = $_POST["comp"];
    $ext = '.jpg';
    
    $erro = 0;
    
    // Verificação dos dados
        
    if(empty($refer)){echo "<p align=center>Você deve digitar uma <b>referência</b>.</p>"; $erro=1;}
    if(empty($preço) || strstr($preço,'R$')==FALSE){echo "<p align=center>Você deve digitar um <b>preço</b> com <b>R$</b>.</p>"; $erro=1;}
    if(empty($produto)){echo "<p align=center>Você deve digitar um <b>produto</b>.</p>"; $erro=1;}
    if(empty($desc)){echo "<p align=center>Você deve digitar uma <b>descrição</b>.</p>"; $erro=1;}
    if(empty($composicao)){echo "<p align=center>Você deve digitar uma <b>composição</b>.</p>"; $erro=1;}
    if($erro==1){echo "<p align=center><a href=index.html>Voltar</a></p>";}
    
    // Insere dados no banco de dados.
    if($erro==0){        
        
    $uploaddir = '../pasta/imagens/';
    $uploadfile = $uploaddir . $_FILES['arquivotp']['name'];
    
    $renomear = rename($_FILES['arquivotp']['tmp_name'], $uploaddir . $refer.$ext);
    
    $urlIMG = "$uploaddir$refer$ext";
    
    if (move_uploaded_file($renomear, $uploadfile)){
        echo "Renomeado e enviado com sucesso";
    }
    
    $sql = "INSERT INTO xxxxxxx VALUES ";
    $sql .= "('$refer','$preço','$produto','$desc','$composicao')";
    
    mysql_query($sql) or die ("Não foi possível inserir o produto.");
    
    echo "<p align=center>Dados inseridos com sucesso.</p>";
    echo "<p align=center><a href=index.html>Voltar ao Cadastro</a></p>";
    
    }
    }
    
    $imagem = $_FILES['arquivotp']['name'];

    //Define a Largura e a Altura
    $largura = 200;
    $altura = 160;

    //Nome do arquivo redimensionado
    $imagem_gerada = explode(".", $imagem);

    //pegamos o conteudo do array e concatenamos com novo.jpg
    $imagem_gerada = $imagem_gerada[0];

    //criamos uma nova imagem ( que vai ser a redimensionada) a partir da imagem original
    $imagem_orig = ImageCreateFromJPEG($imagem);

    //pega a altura e a largura da imagem original
    $pontoX = ImagesX($imagem_orig);
    $pontoY = ImagesY($imagem_orig);

    //Criamos a imagem redimensionada com a funcao ImageCreateTrueColor para suportar um grande numero de cores
    $imagem_fin = ImageCreateTrueColor($largura, $altura);

    //copiamos o conteudo da imagem original e passamos para o espaco reservado a redimencao
    ImageCopyResampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY);

    //Salva a imagem
    ImageJPEG($imagem_fin, $imagem_gerada);

    //Libera a Memoria
    ImageDestroy ($imagem_orig);
    ImageDestroy ($imagem_fin);

A única coisa que alterei foi a variável $imagem. Quando a variável era fixa, ex: $imagem="foto.jpg"; o redimensionamento funcionava perfeitamente. Mas quando alterei para "$imagem = $_FILES['arquivotp']['name'];" simplesmente parou de funcionar! <_<

Não sei se expliquei direito, mas eu estou aprendendo tudo na mão grande, lendo livros, fóruns e tal... enfim...

[]s

Matheus

Link para o comentário
Compartilhar em outros sites

  • 0

Olá!

Repito: Tu estás pegando o vetor FILES e não o arquivo movido! O vetor FILES na posição name possui somente o nome do arquivo no upload! Queres verificar? Coloque um echo antes na linha que atribui o nome do arquivo...

echo $imagem = $_FILES['arquivotp']['name'];

Agora verifique o manual da função rename(). Ela retorna um booleano caso consiga efetuar a mudança do nome do arquivo. Depois tu utilizas a variável $renomear, que é booleana, para colocar o novo nome do arquivo =S.

Vou te dar o caminho das pedras:

http://br.php.net/manual/pt_BR/function.mo...loaded-file.php

http://br.php.net/manual/pt_BR/function.rename.php

http://br.php.net/manual/pt_BR/function.im...atefromjpeg.php

Lembre-se: Pegue o nome do arquivo local, e não o do vetor FILES... A imagem está saindo preta porque ela não existe e está criando do nada...

Link para o comentário
Compartilhar em outros sites

  • 0

Disponha! =)

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, desculpem reviver o tópico depois de tanto tempo, mas estou com um problema parecido, mas apenas algumas imagens ficam pretas, e outras funcionam perfeitamente, por isso acredito que meu problema seja um pouco diferente.

por favor deem uma olhada nos scripts:

index.php:

<?php require_once ("conexao.php");

$sql = "SELECT * FROM `nova_imagens` WHERE pasta = 'Alice'";

$query = mysql_query($sql);

$dados = mysql_fetch_assoc($query);

?>

<!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=utf-8" />

<title>Untitled Document</title>

</head>

<body>

Nome da pasta:

<form id="form1" name="form1" method="post" action="cria_pasta.php">

<p>

<input type="text" name="pasta" id="pasta" />

</p>

<p>

<label></label>

<input type="submit" name="enviar" id="enviar" value="Criar Pasta" />

</p>

<p>Ou escolha uma das pastas a seguir:</p>

<p>

<label></label>

</p>

</form>

<form enctype="multipart/form-data" action="grava.php" method="post">

<p>Send this file:

<input name="arquivo" type="file" />

</p>

<p>Descrição da foto:

<label>

<input name="descricao" type="text" id="descricao" size="50" maxlength="255" />

</label>

</p>

<p>

<input type="submit" value="Send File" />

</p>

<p>colocar o arquivo na pasta :

<label>

<select name="pasta" id="pasta">

<option>selecione</option>

<?php include 'listar.php'; ?>

</select>

</label>

</p>

</form>

<br /><br /><br /><br /><br />

<?php do{?>

<a href="<?php echo $dados['pasta'];?>/<?php echo $dados['foto'];?>" target=_blank"><img src="<?php echo $dados['pasta];?>/<?php echo $dados['miniatura'];?>" border=0" /></a>

<?php }while($dados = mysql_fetch_assoc($query));?>

</body>

</html>

arquivo grava.php (o outro form só serve pra criar as pastas no servidor.)

<?

require_once ("conexao.php");

require_once("funcoes.php");//funções que geram os arquivos nos tamanhos grande e thumb

$descricao = $_POST['descricao];

$data = date('Y-m-d');

$pasta = $_POST['pasta'];

$nome = $_FILES[arquivo]['name'];

//$trans = array("ç" => "c", " " => "_", "ã" => "a", "é" => "e", "ê" => "e", "â" => "a");

//$nometrans = strtr($nome, $trans);

if($_FILES[arquivo]){

echo "<h1>Resultado do upload:</h1>";

$caminho= $pasta."/";

$arq1= $nome;

$arq2='thumb_'.$nome;

$path = $caminho.$arq1; //Nome do arquivo grande no servidor com caminho

$pathumb = $caminho.$arq2; //Nome do arquivo thumb no servidor com caminho

$up = uploadJPEG($_FILES[arquivo],$path); // Para o 3º e 4º parametros usam valores padrão

$upthumb = uploadJPEGthmb($_FILES[arquivo],$pathumb); // Para o 3º e 4º usam valores padrão

//primeiro upload, o arquivo grande!

switch($up){

case 1:

$sql = "insert into nova_imagens (descricao, pasta, foto, miniatura, data) values ('$descricao', '$pasta', '$arq1', '$arq2', '$data')";

$query = mysql_query($sql);

echo "Upload bem sucedido!<br><br><img src='$path'><br><br>";

echo "Se você já fez um upload antes e a foto não for atualizada tecle F5<br><br>";

echo "arquivo de nome: $nome na pasta $pasta";

echo $data;

break;

case 2:

echo "Arquivo não enviado!";

break;

case 3:

echo "O arquivo não é do tipo JPEG!";

break;

case 4:

echo "O arquivo é maior do que o permitido!";

break;

case 5:

echo "Ocorreu algum erro durante o redimensionamento!";

}

// segundo upload, arquivo pequeno

switch($upthumb){

case 1:

echo "Upload bem sucedido!<br><br><img src='$pathumb'><br><br>";

echo "Se você já fez um upload antes e a foto não for atualizada tecle F5<br><br>";

break;

case 2:

echo "Arquivo não enviado!";

break;

case 3:

echo "O arquivo não é do tipo JPEG!";

break;

case 4:

echo "O arquivo é maior do que o permitido!";

break;

case 5:

echo "Ocorreu algum erro durante o redimensionamento!";

}

}

else{

}

?>

Esses scripts eu peguei na maioria da web e fui juntando e adaptando conforme minha cecessidade, o que preciso fazer é criar uma pasta no servidor, que servirá como album, depois colocar a imagem na pasta e uma thumb pra colocar nas páginas do album, então eu coloco os caminhos em um banco de dados para organizar os albuns e criar um sistema de pesquisa de acordo com a descrição da imagem.

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
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...