Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal! Por favor me ajudem!
Tenho um código que recebe o $_FILES de um form, redimensiona-o e salva no diretório do servidor. O código aceita arquivos PNG e JPG. Até aí tudo bem mas o "estranho" é o seguinte:
Para arquivos PNG não há problema. Já os JPG não é qualquer arquivo que é aceito. Alguém já viu isso?
Pesquisei sobre o assunto na net e em vários livros mas não achei nada. No princípio achei que o arquivo JPG que eu estava usando para testes poderia estar corrompido ou algo desse tipo mas depois vi que isso aconteceu com outros arquivos de extensão JPG, mas não com todos.
Já vi vários códigos postados aqui no fórum que usam as mesmas funções que eu uso mas ninguém queixou desse problema. Cheguei a pensar que fosse algum problema no Apache/PHP do meu micro mas no servidor da net dá o mesmo erro, independente do browser e do micro utilizado.
Vou postar os códigos para facilitar o entendimento. O "..." significa que eu tô pulando partes do código, para mostrar somente o que interessa.
CADASTRO.PHP - Essa é a página do formulário.
CODE
...
<form enctype="multipart/form-data" method="POST" action="" name="formusu">
...
<input type="file" size="30" name="f_fotousu">
...
<input type="submit" name="cmdincusu" value="Incluir">
...
VALIDA.PHP - Página que valida os dados recebidos do formulário.
CODE
...
if ($_FILES["f_fotousu"]["name"]!="" AND (!stristr($_FILES["f_fotousu"]["type"],"jpeg") AND !stristr($_FILES["f_fotousu"]["type"],"pjpeg") AND !stristr($_FILES["f_fotousu"]["type"],"png") AND !stristr($_FILES["f_fotousu"]["type"],"x-png"))) {
$erro .= "Seu arquivo de foto não está em um dos formatos permitidos.<br>"; }
...
if (isset($_FILES['f_fotousu']['name']) AND (stristr($_FILES['f_fotousu']['type'],"jpeg") OR stristr($_FILES['f_fotousu']['type'],"pjpeg"))) {
$tipofoto = "jpg";
} elseif (isset($_FILES['f_fotousu']['name']) AND (stristr($_FILES['f_fotousu']['type'],"png") OR stristr($_FILES['f_fotousu']['type'],"x-png"))) {
$tipofoto = "png";
}
$foto = "u".$codigousu.".jpg";
#Redimensionando e gravando a imagem
include("redimensiona.php");
...
REDIMENSIONA.PHP - Redimensiona a foto e grava na pasta do server.
CODE
...
13. $imagem = $_FILES['f_fotousu']['tmp_name'];
14. $diretorio = $_SESSION['dir_usu'];
15. #lê a imagem e obtem as dimensões dela.
16. if ($tipofoto=="jpg") {
17. $img_origem = imagecreatefromjpeg($imagem);
18. } elseif ($tipofoto=="png") {
19. $img_origem = imagecreatefrompng($imagem);
20. }
21. $largura_origem = imagesx($img_origem);
22. $altura_origem = imagesy($img_origem);
23. $proporcao = $largura_origem / $altura_origem;
24. #redimensiona a largura e altura proporcionalmente às medidas originais
25. if ($proporcao >= 1.33) {
26. $largura_redim = 200;
27. $altura_redim = intval($largura_redim / $proporcao);
28. } else {
29. $altura_redim = 150;
30. $largura_redim = intval($altura_redim * $proporcao);
31. }
32. #cria a imagem redimensionada que irá conter a imagem original.
33. $img_redim = imagecreatetruecolor($largura_redim,$altura_redim);
34. #copia a imagem original para dentro da imagem redimencionada
35. imagecopyresampled($img_redim, $img_origem, 0, 0, 0, 0, $largura_redim+1, $altura_redim+1, $largura_origem, $altura_origem);
36. #salva a imagem redimensionada
37. imagejpeg($img_redim, $diretorio.$foto);
Beleza? Mas quando tenta enviar os tais JPG "esquisitos" dá essas mensagens de erro:
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in H:\wamp\www\projeto\redimensiona.php on line 17
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'h:/wamp/tmp\php55.tmp' is not a valid JPEG file in H:\wamp\www\projeto\redimensiona.php on line 17
Warning: imagesx(): supplied argument is not a valid Image resource in H:\wamp\www\projeto\redimensiona.php on line 21
Warning: imagesy(): supplied argument is not a valid Image resource in H:\wamp\www\projeto\redimensiona.php on line 22
Warning: Division by zero in H:\wamp\www\projeto\redimensiona.php on line 23
Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in H:\wamp\www\projeto\redimensiona.php on line 33
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in H:\wamp\www\projeto\redimensiona.php on line 35
Warning: imagejpeg(): supplied argument is not a valid Image resource in H:\wamp\www\projeto\redimensiona.php on line 37
É algum problema com a função imagecreatefrom. Ela não está reconhecendo o arquivo JPG("...is not a valid JPEG file...").
O estranho é que isso não acontece sempre e nem com todos os arquivos JPG, só com alguns.
Existe mais de um tipo de JPG?
Alguém já teve esse tipo de problema?
Podem me ajudar?
Valeu!
Carregando comentários...