Ir para conteúdo

POWERED BY:

Arquivado

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

Edu_Floripa

Problema Upload (Função imagecreatefromjpeg)

Recommended Posts

Ai pessoal. Peço uma forcinha aqui.

 

Somente "algumas" fotos em "algumas" resoluções de máquinas digitais dão problema.

Já testei em várias máquinas e as vezes funciona o upload, outras vezes o código faz o Upload, ou seja, envia o arquivo, mas a foto fica totalmente preta, e a mensagem dá o seguinte erro após o UPLOAD:

 

"OBS: O engraçado é que se você abre a foto no PAINT e salva ela novamente o código aceita o Upload"

Nesse link tem uma foto que bati e tem esse problema: www.floripaingleses.com.br/IMAG0003.JPG

 

 

ERRO APÓS UPLOAD:

 

 

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '../fotos_empresas/cb80f91b204f60cf271f9e3c2d3771c5.JPG' is not a valid JPEG file in /home/floripa/public_html/area1/update_ftemp1.php on line 383

 

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '../fotos_empresas/cb80f91b204f60cf271f9e3c2d3771c5.JPG' is not a valid JPEG file in /home/floripa/public_html/area1/update_ftemp1.php on line 384

 

Warning: imagesx(): supplied argument is not a valid Image resource in /home/floripa/public_html/area1/update_ftemp1.php on line 392

 

Warning: imagesx(): supplied argument is not a valid Image resource in /home/floripa/public_html/area1/update_ftemp1.php on line 393

 

... daí por diante...

 

O CÒDIGO È...........:

 

<?php

 

// ********************************************************************

// --------> INÍCIO DA VERIFICAÇÃO <---------

// ********************************************************************

 

// Adquire variáveis do campo

 

$foto_name = $_FILES['ftemp1']['name'];

$foto_arquivo = $_FILES['ftemp1'];

$original = $_FILES['ftemp1'];

$foto_tipo = $_FILES['ftemp1']['type'];

$foto_record = $row_rsBuscarUsuario['ftemp1_usu'];

$foto_msg = 'Foto Profissional 1 ';

$foto_campo = 'ftemp1_usu';

 

 

// Contador para criar link volta

$volta = 0;

 

// Recebe variável primária (ID)

$id_usu = $_POST['id_usu'];

 

// Verifica se o campo NOME esta preenchido

if (!empty($foto_name))

{

 

// Verifica se o mime-type do arquivo é de imagem

 

if(!eregi("^image/(pjpeg|jpeg|jpg|png|gif|bmp|PJPEG|JPEG|JPG|GIF|BMP|PNG)$", $foto_arquivo['type']))

{

echo "<br><br><center><b>O arquivo enviado não é uma imagem. Envie outro arquivo .jpg ou .gif !!</b></center>";

}

else

{

$arquivo_ft = isset($foto_arquivo) ? $foto_arquivo : FALSE;

preg_match("/\.(gif|bmp|png|jpg|jpeg|GIF|BMP|PNG|JPG|JPEG){1}$/i", $arquivo_ft["name"], $ext);

$extensao = $ext[1];

 

if ($extensao == "jpg" OR $extensao == "gif" OR $extensao == "JPG" OR $extensao == "GIF" OR $extensao

== "jpeg" OR $extensao == "JPEG")

{

// Variável conta qtas fotos foram em upload.

$num_fotos = 0;

 

// Diretório para onde o arquivo será movido

$diretorio = ".fotos_empresas/";

$dir = "../fotos_empresas/";

// Repassa path do campo Foto para variável

$nome_foto = $foto_record;

 

// Verifica se já existe foto no diretório

if ($nome_foto <> 'vazio')

{

// Se existe foto então EXCLUI a foto do diretório

unlink("../fotos_empresas/media_".$nome_foto);

unlink("../fotos_empresas/mini_".$nome_foto);

}

// Se não existe a foto então CADASTRA NOVA FOTO

$arquivo_ft = isset($foto_arquivo) ? $foto_arquivo : FALSE;

$nome_ft = str_replace(" ", "_", $arquivo_ft["name"]);

$nome_ft = strtolower($nome_ft);

$nome_ft = $diretorio . $nome_ft;

if (file_exists($nome_ft))

{

echo "Erro ao enviar aquivo - $foto_msg - (Error: Nome) - Envie novamente!";

exit;

}

preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo_ft["name"], $ext);

$imagem_nome_ft = md5(uniqid(time())) . "." . $ext[1];

$imagem_dir_ft = "../fotos_empresas/" . $imagem_nome_ft;

 

 

if (move_uploaded_file($arquivo_ft['tmp_name'], $imagem_dir_ft))

{

// Arquivo enviado com sucesso

$num_fotos = $num_fotos+1;

$est = $ext[1];

 

/* INÍCIO DA CRIAÇÃO DA MINIATURA

========================== */

 

/* Cria as miniaturas MINI e MEDIA =========================*/

 

// Imagem a ser aberta (800x600)

$imagem = $imagem_dir_ft;

// Define o tamanho das imagens

$tamanhos = getimagesize($imagem);

// Define o tamanho máximo da figura

$altura = $tamanhos[1];

$largura = $tamanhos[0];

$tamanho_maximo['largura'] = 220;

$tamanho_maximo['altura'] = 220;

 

// Qualidade da figura

$qualidade = 60;

 

// Tamanho da figura

$figura['largura'] = $largura;

$figura['altura'] = $altura;

 

// Se a figura for menor que o tamanho máximo na altura e na largura, ele não a aumenta

if($figura['largura'] < $tamanho_maximo['largura'] && $figura['altura'] < $tamanho_maximo['altura'])

{

$tamanho_maximo['largura'] = $figura['largura'];

$tamanho_maximo['altura'] = $figura['altura'];

}

 

// Define qual tamanho é maior, largura ou altura, para depois, calcular o tamanho certo

if($figura['largura'] > $figura['altura'])

{

$calculo = $figura['largura'] / $tamanho_maximo['largura'];

}

else

{

$calculo = $figura['altura'] / $tamanho_maximo['altura'];

}

 

$nova_figura_largura = $figura['largura'] / $calculo;

$nova_figura_altura = $figura['altura'] / $calculo;

 

$largura_mini = $nova_figura_largura * 45/100;

$altura_mini = $nova_figura_altura * 45/100;

$largura_media = $nova_figura_largura;

$altura_media = $nova_figura_altura;

 

// Cria o nome dos arquivos

$imagem_gerada_mini = explode(".", $imagem);

$imagem_gerada_mini = "mini_".$imagem_nome_ft;

$imagem_gerada_media = explode(".", $imagem);

$imagem_gerada_media = "media_".$imagem_nome_ft;

 

// Cria as novas imagens

 

if ($est == 'JPEG' or $est == 'jpeg' or $est == 'JPG' or $est == 'jpg' or $est == 'jpe' or $est == 'JPE' or

$est == 'jfif' or $est == 'JFIF' or $est == 'pjpeg' or $est == 'PJPEG')

{

$imagem_orig_mini = ImageCreateFromJPEG($imagem);

$imagem_orig_media = ImageCreateFromJPEG($imagem);

}

 

if ($est == 'GIF' OR $est == 'gif')

{

$imagem_orig_mini = ImageCreateFromGIF($imagem);

$imagem_orig_media = ImageCreateFromGIF($imagem);

}

 

// Pega largura da imagem original e define

$pontoX_mini = ImagesX($imagem_orig_mini);

$pontoX_media = ImagesX($imagem_orig_media);

 

// Pega altura da imagem original e define

$pontoY_mini = ImagesY($imagem_orig_mini);

$pontoY_media = ImagesY($imagem_orig_media);

 

// Cria os Thumbs

$imagem_fin_mini = ImageCreateTrueColor($largura_mini, $altura_mini);

$imagem_fin_media = ImageCreateTrueColor($largura_media, $altura_media);

 

// Copia as imagens originais para dentro

ImageCopyResampled($imagem_fin_mini, $imagem_orig_mini, 0, 0, 0, 0, $largura_mini+1,

$altura_mini+1, $pontoX_mini, $pontoY_mini);

ImageCopyResampled($imagem_fin_media, $imagem_orig_media, 0, 0, 0, 0, $largura_media+1,

$altura_media+1, $pontoX_media, $pontoY_media);

 

// Salva as imagens no diretorio definido ($dir)

if ($est == 'JPEG' OR $est == 'jpeg' OR $est == 'JPG' or $est == 'jpg')

{

ImageJPEG($imagem_fin_mini, "$dir/".$imagem_gerada_mini);

ImageJPEG($imagem_fin_media, "$dir/".$imagem_gerada_media);

}

if ($est == 'GIF' OR $est == 'gif')

{

ImageGIF($imagem_fin_mini, "$dir/".$imagem_gerada_mini);

ImageGIF($imagem_fin_media, "$dir/".$imagem_gerada_media);

}

// Libera a memória

ImageDestroy($imagem_orig_mini);

ImageDestroy($imagem_fin_mini);

ImageDestroy($imagem_orig_media);

ImageDestroy($imagem_fin_media);

 

/* Excluir a imagem original do diretório do site

==============================*/

unlink("../fotos_empresas/" . $imagem_nome_ft);

 

 

/* FIM DA CRIAÇÃO DA MINIATURA

======================== */

 

}

else

{

// Falha ao enviar arquivo

echo "Erro ao enviar o arquivo - $foto_msg !<p>";

}

 

// Mostra o número de arquivos enviados

echo "<br><br><center><b>Arquivos Enviados: " . $num_fotos . " <center><b><br>";

 

// Faz o UPDATE do Path da foto

$sql = "UPDATE usuario SET $foto_campo = '$imagem_nome_ft' WHERE id_usu = '$id_usu'";

 

// Executa sql

if (!@mysql_query($sql))

{

// Fallha ao cadastrar, existe algum erro

echo "<br><br><center>Problemas ao efetuar cadastro da FOTO.<br><br>";

exit();

}

else

{

// Cadastro obteve sucesso

echo "<br><br><center><b>FOTO ALTERADA COM SUCESSO !!</b></center>";

}

}

else

{

echo "<br><br><center><b>ATENÇÃO: Arquivo não enviado - A extensão deve ser .jpg ou .gif

</b></center>";

}

}

}

 

echo "<br><br><center><b>Clique em Voltar !!</b></center>";

 

?>

 

 

-----------------

Desde já agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o ideal então seria antes de upar as fotos, salvá-las novamente...

usando processo em lote do fireworks por exemplo....

bom, seria uma solução...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse problema é bem provavel ocorrer por causa do EXIF

 

o que é exif:

http://forum.imasters.com.br/index.php?showtopic=164869

 

como talvez resolver:

http://forum.imasters.com.br/index.php?showtopic=287946

 

Ps.: antes de postar pesquise, pois sua duvida apareceu varias pessoas com a mesma e na maioria foram resolvidas ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse problema é bem provavel ocorrer por causa do EXIF

 

o que é exif:

http://forum.imasters.com.br/index.php?showtopic=164869

 

como talvez resolver:

http://forum.imasters.com.br/index.php?showtopic=287946

 

Ps.: antes de postar pesquise, pois sua duvida apareceu varias pessoas com a mesma e na maioria foram resolvidas ;)

Valeu a dica amigo.

O que acontece é realmente a mesma situação do Otavio:

 

É um site onde o cliente faz o upload de suas fotos, e realmente se torna inviável

sugerir que o cliente limpe o EXIF das fotos.

Até mesmo porque não sei se funcionaria desta forma.

 

O Caso é que testei como o Otávio relatou naquele tópico:

 

Quando um arquivo é JPG, a função exif_imagetype() é igual a 2(IMAGETYPE_JPEG).

Quando um arquivo é PNG, a função exif_imagetype() é igual a 3(IMAGETYPE_PNG).

 

Curiosamente, não entendi e não me perguntem porque, todas as fotos JPG que provocaram erro no script aparecem com exif_imagetype igual a 3. É por isso que aparecia a mensagem de erro "...is not a valid JPEG file...".

Eu acho que por algum motivo essas informações de EXIF inseridas na foto podem estar afetando a interpretação do arquivo pelo PHP.

 

Então para corrigir o erro, primeiro fiz a verificação do tipo de arquivo usando a função exif_imagetype() para depois usar a função imagecreatefrom correta(jpeg ou png).

Para vocês terem uma idéia do "esquisito", se o PHP entende que o exif_imagetype() de um arquivo JPG é igual a 3(IMAGETYPE_PNG), eu mando ele ler o arquivo com imagecreatefromPNG() e funciona perfeitamente. Dá pra entender?

 

e o que acontece é que o arquivo é JPEG e a função exif_imagetype() retorna 2(IMAGETYPE_JPEG), e não "3 - PNG" como no caso do otávio.

 

Pesquise bastante mas ainda não achei solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o Otavio disse que isso resolveu:

if (exif_imagetype($imagem)==2) { # 2 = IMAGETYPE_JPEG
$img_origem = imagecreatefromjpeg($imagem);
} elseif (exif_imagetype($imagem)==3) { # 3 = IMAGETYPE_PNG
$img_origem = imagecreatefrompng($imagem);
}

se o exif_type for tres use o imagecreatefrompng(); ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

o Otavio disse que isso resolveu:

if (exif_imagetype($imagem)==2) { # 2 = IMAGETYPE_JPEG
$img_origem = imagecreatefromjpeg($imagem);
} elseif (exif_imagetype($imagem)==3) { # 3 = IMAGETYPE_PNG
$img_origem = imagecreatefrompng($imagem);
}

se o exif_type for tres use o imagecreatefrompng(); ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

o Otavio disse que isso resolveu:

if (exif_imagetype($imagem)==2) { # 2 = IMAGETYPE_JPEG
$img_origem = imagecreatefromjpeg($imagem);
} elseif (exif_imagetype($imagem)==3) { # 3 = IMAGETYPE_PNG
$img_origem = imagecreatefrompng($imagem);
}

se o exif_type for tres use o imagecreatefrompng(); ;)

 

pois é amigo...

fiz esse teste como já relatei, mas o exif_type deu: 2

To procurando a resposta, solução ou pelo menos outra possibilidade de criar iniatura sem usar

a função "imagecreatefromjpeg".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que uma forma simples seria gravar a foto em um arquivo, depois abrir e ler esse arquivo e depois criar a imagem com imagecreatefromstring.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim JCMPJ, mas ainda haverá o problemas de hospedagens que lhe limitam até 8md de "memoria" e o negocio do EXIF.

A maneira que você citou provavelmente ocorreia os mesmos problemas.

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.