Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

[Resolvido] Não gera miniaturas

Recommended Posts

Pessoal, tenho o código abaixo que faz upload da foto, grava no banco mas não gera a miniatura.

 

Porem, não consigo achar o erro.

 

Podem me ajudar?

 

Obrigado.

<?php  

 include "../config/constantes.php";
 include "../config/conexao.php"; 

 $foto     = $_FILES['Filedata'];
 $nome     = $foto['name'];
 $tipo     = $foto['type'];
 $tmpname  = $foto['tmp_name'];

 $extensao = pathinfo($nome, PATHINFO_EXTENSION); 

 $imagem_nome = md5(uniqid(time())).".". $extensao;

 //Diretórios de Gravação das imagens
 $caminho_normal = "../../".endereco_normal."/".$imagem_nome;
 $caminho_mini = "../../".endereco_mini."/".$imagem_nome;

if(move_uploaded_file($tmpname, $caminho_normal))                       
{
 $id_string = "select id_produtos from produtos where referencia_produtos='".$_GET["parametro"]."'";
 $id_query  = $conexao->query($id_string);
 list($parametro) = $id_query->fetch_row();


 $inserir_fotos_string = 
 "
insert into fotos (nome_fotos, id_produtos_fotos) 
values ('$imagem_nome',$parametro)
 ";

 $inserir_fotos = $conexao->query($inserir_fotos_string);

 //CRIA UMA NOVA IMAGEM
 if ($tipo =="image/pjpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); }
 else if ($tipo =="image/jpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); }
 else if ($tipo =="image/gif") { $imagem_original = imagecreatefromgif($caminho_normal); }
 else if ($tipo =="image/png") { $imagem_original = imagecreatefrompng($caminho_normal); }

 //Criaçao da miniatura
 //LARGURA
 $largura_original = ImagesX($imagem_original);
 //ALTURA
 $altura_original = ImagesY($imagem_original); 

 //DEFINE OS PARÂMETROS DA MINIATURA
 $largura_mini = 150;
 $altura_mini = ($altura_original * $largura_mini) / $largura_original;

 //CRIA O THUMBNAIL
 $imagem_final = imagecreatetruecolor($largura_mini, $altura_mini); 

 //COPIA A IMAGEM ORIGINAL PARA DENTRO
 imagecopyresampled($imagem_final, $imagem_original, 0, 0, 0, 0, $largura_mini+1, $altura_mini+1, $largura_original, $altura_original); 

 //SALVA A IMAGEM
 if ($tipo =="image/pjpeg") { imagejpeg($imagem_final, $caminho_mini ,100); }
 else if ($tipo =="image/jpeg") { imagejpeg($imagem_final, $caminho_mini ,100); }
 else if ($tipo =="image/gif") { imagegif($imagem_final, $caminho_mini ,100); }
 else if ($tipo =="image/png") { imagepng($imagem_final, $caminho_mini); }


 //LIBERA A MEMÓRIA
 imagedestroy($imagem_original);
 imagedestroy($imagem_final);
}  
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não só esta sendo feito o upload como também esta gravando o nome no banco.

 

Esse script gerar as miniaturas, estava usando ele. Porem,como foi preciso adaptar para o SWFUpload (Jquery-PHP), daí peguei apenas a parte de gerar miniaturas.

 

Mas não esta gerando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos melhorar um pouco esse seu script?

 

Com o uso de call_user_func_array você evita redundância no código, por exemplo verificar duas vezes qual o tipo de arquivo para então chamar a função correspondente.

 

<?php

/**
*  Executa uma dada função com os seus parâmetros caso existam
*  @return mixed O retorno da dada função 
*/
function exec_func( )
{
   $args = func_get_args( );
   $func = array_shift( $args );
   return call_user_func_array( $func, $args );
}
/**
*  Verifica se é um resource identificador da imagem
*  @param resource $image O identificador da imagem
*  @return void
*/
function error_image( $image )
{    
   if( ! is_resource( $image ) )
   {
       trigger_error( sprintf( '%s is not an image resource identifier!', $image ), E_USER_ERROR );
   }   
}
/**
*  Redimensiona a imagem recortando
*  @param resource $image O identificador da imagem
*  @param int $new_width A nova largura
*  @param int $new_height A nova altura
*  @return resource O identificador da imagem modificada
*/
function resize_crop( $image, $new_width, $new_height )
{
   error_image( $image );
   $new_width  = ( int ) $new_width;
   $new_height = ( int ) $new_height;
   $old_width  = imagesx( $image );
   $old_height = imagesy( $image );
   $hm         = ( $old_height / $new_width );
   $wm         = ( $old_width / $new_height );
   $h_height   = ( $new_height / 2 );
   $h_width    = ( $new_width / 2 );

   if( $wm > $hm )
   {
       $position_crop[ 2 ] = ( $old_width / $hm );
       $position_crop[ 3 ] = $new_height;
       $position_crop[ 0 ] = ( ( $position_crop[ 2 ] / 2 ) - $h_width );
       $position_crop[ 1 ] = 0;
   }
   elseif( $wm <= $hm )
   {
       $position_crop[ 2 ] = $new_width;
       $position_crop[ 3 ] = ( $old_height / $wm );
       $position_crop[ 0 ] = 0;
       $position_crop[ 1 ] = ( ( $position_crop[ 3 ] / 2 ) - $h_height );
   }

   $img = imagecreatetruecolor( $new_width, $new_height );
   imagecopyresampled( $img, $image, - $position_crop[ 0 ], - $position_crop[ 1 ], 0, 0, $position_crop[ 2 ], $position_crop[ 3 ], $old_width, $old_height );

   return $img;
}

$filename = 'Desert.jpg';

switch( strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) ) )
{
   case( 'jpg' ):
   case( 'jpeg' ):
       $imagecreate = 'imagecreatefromjpeg';
       $imagesave = 'imagejpeg';
       break;
   case( 'png' ):
       $imagecreate = 'imagecreatefrompng';
       $imagesave = 'imagepng';
       break;
   case( 'gif' ):
       $imagecreate = 'imagecreatefromgif';
       $imagesave = 'imagegif';
       break;
   default:
       trigger_error( 'Invalid image file', E_USER_ERROR );            
}

$resource = exec_func( $imagecreate, $filename );

$thumb = resize_crop( $resource, 150, ( ( imagesy( $resource ) * 150 ) / imagesy( $resource ) ) );

exec_func( $imagesave, $thumb, $filename, 100 );

?>

 

O script fica limpo. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehe.

 

To até com vergonha.

 

Mano, eu sou programador novel básico ainda. Não tenho esse conhecimento todo que voce tem.

Mas tenho progredido.

 

Como se trata de upload com SWFUpload, não estou conseguindo fazer verificações de erros nesse arquivo php.

 

Estou com uma leve impressão que ele, ou não esta conseguindo verificar o typo, ou por causa do SWFUpload o tipo é lido diferente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não esquenta, ninguém nasceu sabendo, a perfeição vem com a prática e estudo.

 

Dá um var_dump em tudo que parecer suspeito para ver o que te retorna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois é.

 

É isso que estou dizendo.

 

Nem um echo "Oi";

 

sai por causa de que é SWFUpload.

 

Então, se houver qualquer tipo de erro no php, ele não é msotrado.

 

Essa que esta sendo a dificuldade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Configure seu código para exibir TODAS as mensagens de erro, adicionando este código à primeira linha do script.

<?php
ini_set( 'display_errors', true );
error_reporting( E_ALL );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou.

 

Posso colocar o codigo todo aqui?

E o meu php.ini ja esta configurado para mostra todos os erros tambem

 

Ja tentei colocar teu codigo tambem, e não gera a mniniatura.

 

Experimentei aqui um jeito bem simples de fazer; Só pra saber se tinha erro.

 

Ele faz o upload, grava no banco mas não cria a miniatura:

...
if(move_uploaded_file($tmpname, $caminho_normal))                       
{
 $id_string = "select id_produtos from produtos where referencia_produtos='".$_GET["parametro"]."'";
 $id_query  = $conexao->query($id_string);
 list($parametro) = $id_query->fetch_row();


 $inserir_fotos_string = 
 "
insert into fotos (nome_fotos, id_produtos_fotos) 
values ('$imagem_nome',$parametro)
 ";

 $inserir_fotos = $conexao->query($inserir_fotos_string);

 $imagemjpg = $caminho_normal;
 $largura_alvo = 150;
 $img = imagecreatefromjpeg($imagemjpg);
 $largura_original = imagesx($img);
 $altura_original = imagesy($img);
 $altura_nova = (int) ($altura_original * $largura_alvo)/$largura_original;
 $nova = imagecreatetruecolor($largura_alvo,$altura_nova);
 imagecopyresampled($nova, $img, 0, 0, 0, 0, $largura_alvo, $altura_nova, $largura_original, $altura_original);
 header("Content-type: image/jpg");
 imagejpeg($nova);
........

Seria mais ou menos isso aqui:

aaa.jpg

Na hora que eu cliko em enviar fotos, vai para um arquivo js que chama o php.

Então, seria igual ao combo estado cidade com ajax. Se houver erro no php, não é mostrado.

 

Ta parecendo que não executa ifs. condicionais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal.

 

Alguma ideia.

 

Não consigo fazer aparecer os erros para serem corrigidos nem acho erro algum.

 

William Bruno, lembra dessa resposta que você deu nesse post?

 

http://forum.imasters.com.br/topic/374728-swfupload-php/page__view__findpost__p__1446874

 

pois bem. Onde esta essa diretiva?

 

É ela quem vai me permitir ver os erros do php?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou dar uma de metido e responder :P

 

Isso é no javascript e se não me engano fica em var settings

var settings = {
   ...,
   ...,
   debug: true

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, entendo.

 

porem, mandei o dreamwer varrer o direrorio todo do site e nao encontrou esse termo

 

Daí minha preocupaçao.

 

Desculpa colega.

Acho que já te amolei demais.

 

Obrigado pela paciência até agora.

 

 

Mas não faz sentido isso.

Não consigo nem mesmo ver os erros do php.

 

Nem o meu código nem o do colega Carlos Coelho funcionam.

 

Deve estar faltando alguma coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, descobri.

 

Sempre fiz deste jeito e nunca deu erro.

 

Então, gostaria de que um de vocês que estão melhor preparados explique porquê:

Seguinte, estava fazendo a verificação assim:

if ($tipo =="image/pjpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); }
else if ($tipo =="image/jpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); }
else if ($tipo =="image/gif") { $imagem_original = imagecreatefromgif($caminho_normal); }
else if ($tipo =="image/png") { $imagem_original = imagecreatefrompng($caminho_normal); }

Mas alterei para assim:

if ($tipo ="image/pjpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); }
else if ($tipo ="image/jpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); }
else if ($tipo ="image/gif") { $imagem_original = imagecreatefromgif($caminho_normal); }
else if ($tipo ="image/png") { $imagem_original = imagecreatefrompng($caminho_normal); }

Ou seja, a variavel deixa de receber o valor para já esta com o valor. Não entendi esse comportamento.

 

if $tipo ==; ta errado.

if $tipo =; ta certo

 

Não entendi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então você quer dizer que esse código aqui:

if (isset($_GET["acao"]) and $_GET["acao"]=="envia") 
{
........

Pode ser(e deve) ser substituído por:

if ($_GET["acao"]="envia") 
{
........

Como um sinal de igualdade só? É isso?

 

Por que aqui

//CRIA UMA NOVA IMAGEM
if ($tipo ="image/pjpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); }
else if ($tipo ="image/jpeg") { $imagem_original = imagecreatefromjpeg($caminho_normal); }
else if ($tipo ="image/gif") { $imagem_original = imagecreatefromgif($caminho_normal); }
else if ($tipo ="image/png") { $imagem_original = imagecreatefrompng($caminho_normal); }

O problema foi o mesmo. Estava == e tive que trocar para =.

Só assim funcionou.

 

 

Então moderador.

 

Pode dar o tópico como encerrado.

 

Minha duvida sanada e minha dificuldade resolvida.

 

Obrigado a todos.

 

Carlos Rocha

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.