OtavioVR 0 Denunciar post Postado Junho 4, 2008 Pode até ser mas então todos sites feitos em php teriam esse problema, certo? Como é que vários sites que recebem e redimensionam fotos funcionam sem problemas? Então como resolver isso? O script que eu postei aqui verifica e recebe a foto, redimensiona e salva na pasta do servidor. Existe outra função além de imagecreatefromjpeg() ou outro script que faça o que eu preciso? Obrigado pela atenção. Fico aguardando o retorno. Compartilhar este post Link para o post Compartilhar em outros sites
João Cagnoni2 0 Denunciar post Postado Junho 4, 2008 Talvez seu php.ini esteja definido para receber somente arquivos com até 2mb (o padrão), e retorna um erro ao criar imagens maiores que isso. Verifique isto, pois de qualquer forma é fácil alterar este limite. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 4, 2008 O script que eu postei aqui verifica e recebe a foto, redimensiona e salva na pasta do servidor. Existe outra função além de imagecreatefromjpeg() ou outro script que faça o que eu preciso? isso está muito relativo. precisaria ver essa imagem em específico. pois é a imagem que esta em conflito com o codigo e nao o codigo em conflito com a imagem no caso o photoshop, versao, MacOS inseria algumas tags XML antes do cabeçalho da imagem. algumas dessas imagens, nem mesmo o visualizador de imagens do windows conseguir abrir. Algumas abria mas apareciam corrompidas. comentei isso sobre um caso específico. Não quer dizer que acontece com todos. Compartilhar este post Link para o post Compartilhar em outros sites
brcontainer 16 Denunciar post Postado Junho 5, 2008 tente usar esse programa: http://baixaki.ig.com.br/download/Exif-Tag-Remover.htm se você ler os meus tópicos vai ver um tópico falando de SNAP em PHP, por que eu tinha um problema com alojamento de memoria no servidor por causa desses EXIF. então mandei pro meu cliente um programa para limpar essas informações, assim ele envia e vai normal. Porem teve uma vez que enviei ao meu cliente outro programa para fazer o mesmo e ele ocorria essa falha igual a que você citou, percebi que a limpeza não era 100% ou era mal feita. Por isso tem de saber qual programa usar ;) Ps.: em php sobre EXIF no maximo que você vai conseguir é ler essas informações. Quanto a redimensionar uma foto só usando a GD(PHP) mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 5, 2008 Silverfox e Hinom, isso é inviável. Imagina se todas as pessoas que usarem o site tiverem que limpar o EXIF antes de enviar uma foto. Isso está fora de cogitação. Existem milhões de sites na net que recebem fotos dos usuários. Nenhum pede pra limpar EXIF antes de enviar. Se só dá pra tratar foto via GD do php e tem esse problema, então é deficiência da linguagem. Vamos resumir o problema. Vou colar aqui o erro que está dando. Isso está lá no início do post. 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 ESSE ERRO NÃO ACONTECE COM APENAS UMA FOTO. EU PEDI PARA VÁRIAS PESSOAS ME ENVIAREM FOTOS JPG E PUDE VERIFICAR QUE O ERRO ACONTECEU COM VÁRIAS FOTOS MAS NÃO COM TODAS. É isso que tá esquitito!!! Compartilhar este post Link para o post Compartilhar em outros sites
brcontainer 16 Denunciar post Postado Junho 5, 2008 bem pode ser a versão do seu GD que pode estar desatualizada tambem, pra mim em parte não é DEFICIENCIA e sim "suporte" o problema é que JPG é um tipo de imagem que não é "GLOBAL" entende o formato dela varia não tem só o "exif", acredite fiquei um mês com o mesmo proplema e tambem achava que usar um programa não era viavel, mas foi a unica maneira que encontrei =/ já teve vez que fui enviar foto para o orkut de celular e dava erro toda hora, eram de celularm, o problema não era exif e sim que o formato estava "danificado" rodava normal no PC mas no orkut não ae fui obrigado a tratar as fotos ;) eu sei que é ruim usar o programa você acha q meu cliente não reclamou? Reclamou sim. então a solução convense-lo. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 6, 2008 Silverfox e Hinom, isso é inviável. Imagina se todas as pessoas que usarem o site tiverem que limpar o EXIF antes de enviar uma foto. Isso está fora de cogitação. Existem milhões de sites na net que recebem fotos dos usuários. Nenhum pede pra limpar EXIF antes de enviar. Se só dá pra tratar foto via GD do php e tem esse problema, então é deficiência da linguagem. Vamos resumir o problema. Vou colar aqui o erro que está dando. Isso está lá no início do post. por isso pedi pra enviar uma dessas fotos para encontrarmos uma soluçao.. mas talvez seja a versão do php, tente atualizar e ver o que acontece. Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 6, 2008 Hinom e Silverfox, resolvi parte do problema e acho que isso pode ajudar muita gente que está na mesma situação que eu. Vamos lá: Aproveitando a dica do Silverfox, pesquisei no manual do PHP sobre as informações das fotos(EXIF) e cheguei nas funções exif_read_data() e exif_imagetype(). 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? Então o script do REDIMENSIONA.PHP ficou assim: CODE if (exif_imagetype($imagem)==2) { # 2 = IMAGETYPE_JPEG $img_origem = imagecreatefromjpeg($imagem); } elseif (exif_imagetype($imagem)==3) { # 3 = IMAGETYPE_PNG $img_origem = imagecreatefrompng($imagem); } ... o restante continua a mesma coisa. Mas como eu disse no início, resolvi PARTE do problema, mas acho que esse erro agora é mole pra vocês: Ao tentar fazer o upload de um arquivo PNG de 831K por exemplo, aparece o seguinte erro: Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 4292 bytes) in C:\wamp\www\projeto\redimensiona.php on line 39 Essa linha 39 é seguinte: $img_origem = imagecreatefrompng($imagem); Só que eu estou permitindo o upload de arquivos de até 2Mb. Arquivos PNG pequenos de 2K, 10K e até um de 500K estão funcionando corretamente mas parece que apartir de um certo tamanho dá esse erro. Como resolvo isso? Obrigado mais uma vez. Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 6, 2008 Mais uma coisa: Ativei a linha extension=php_exif.dll no php.ini do meu Wampserver que roda no meu micro mas como ativo essa extensão no servidor? Não consigo visualizar o arquivo php.ini e a pasta /php/ext está em branco, não tem nada. Podem me ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 6, 2008 Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 4292 bytes) in C:\wamp\www\projeto\redimensiona.php on line 39 no inicio do codigo especifique: ini_set("memory_limit","12M"); se a sua conta nao possuir privilegios nao poderá alterar em tempo de execução.. para isso entre em contato com o suporte do serviço de hospedagem Ativei a linha extension=php_exif.dll no php.ini do meu Wampserver que roda no meu micro mas como ativo essa extensão no servidor? Não consigo visualizar o arquivo php.ini e a pasta /php/ext está em branco, não tem nada. Podem me ajudar? entre em contato com o suporte do serviço de hospedagem quanto ao problema das imagens tem como você saber qual a procedência desssas imagens ? qual software foi usado, como foi covnertido, etc.. Compartilhar este post Link para o post Compartilhar em outros sites
CappiLevi 1 Denunciar post Postado Junho 6, 2008 Eu faço upload das minhas imagens no servidor de uma maneira diferente e nunca tive problemas com upload de imagens. Vou postar aqui o código, não sei se vai ajudar mas pronto: if(isset($_FILES["arquivo"])) { $arquivo = $_FILES["arquivo"]; $imagem_modificada = $arquivo["name"]; $imagem_modificada = str_replace(" ", "_", $imagem_modificada); $imagem_modificada = str_replace("-", "_", $imagem_modificada); $arquivo_temp = $arquivo["tmp_name"]; $imagem_modificada = str_replace(" ", "_", $imagem_modificada); $imagem_modificada = str_replace("-", "_", $imagem_modificada); $pasta_dir = "$diretorio_raiz"."imagens/";//diretorio dos arquivos //se nao existir a pasta ele cria uma $imagem_uploader = $pasta_dir . $imagem_modificada; // Faz o upload da imagem move_uploaded_file($arquivo_temp, $imagem_uploader); $imagem = "http://urldosite/imagens/" . $imagem_modificada; } Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 6, 2008 ULTIMATE desse modo não faz verificação do tipo da imagem Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 6, 2008 Obrigado Hinom, vou fazer isso que você falou. Quanto aos arquivos, fica difícil saber a procedência porque recebi fotos de várias pessoas. Dá pra ver que aqui no meio tem foto escaneada, foto tirada por máquina digital e foto editada. Ultimate, seu script não verifica o tipo de arquivo e nem redimensiona a foto. O redimensionamento para mim é essencial pois poupa espaço no servidor. Obrigado e abraço à todos. Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 6, 2008 Hinom, coloquei ini_set() como você sugeriu mas o erro continuou. Mudei o memory_limit no php.ini para 12M mas continua dando a mensagem de erro. Veja que os valores(bytes) mudaram mas o erro continua. Fatal error: Allowed memory size of 12582912 bytes exhausted (tried to allocate 5642907 bytes) in C:\wamp\www\projeto\redimimagem.php on line 39 E agora o que pode ser? Compartilhar este post Link para o post Compartilhar em outros sites
OtavioVR 0 Denunciar post Postado Junho 6, 2008 Hinom, passei o memory_limit para 24M e funcionou. Eu posso deixar um valor alto assim? Não vai me prejudicar em nada não? Por exemplo, se várias pessoas estiverem fazendo o upload de arquivos... Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 6, 2008 eu deixo em 80mb num servidor pentium 4 dual, 1Gb ram, 100gb hd está com média de 500 acessos unicos por hora. mas verifique as configurações de hardware do seu server e também faça testes de benchmark e performance dos seus scripts. Compartilhar este post Link para o post Compartilhar em outros sites
CappiLevi 1 Denunciar post Postado Junho 6, 2008 ULTIMATE desse modo não faz verificação do tipo da imagem Você têm razão, então modifiquei aqui o código pra você. Faz mais do que o seu script faz: <O SCRIPT ABAIXO FOI TESTADO E FUNCIONA PERFEITAMENTE> <Neste script contém código produzido por: Fabyo - FelipeDD - OtavioVR - ULTIMATE !Atenção! Abaixo as opções entre parênteses podem ser alteradas. - Valida se a pessoa inseriu uma imagem no formulário após envio; - Valida o tipo de imagem (jpg, gif ou png); - Valida o tamanho da imagem (Máximo 500 kb); - Faz upload da imagem para o servidor; - Valida se foi realizado com sucesso o upload da imagem para então redimensioná-la; - Redimensiona o tamanho da imagem (317x441); CODE if($_SERVER["REQUEST_METHOD"]== "POST") { if(isset($_FILES["arquivo"])) { $arquivo = $_FILES["arquivo"]; if ($arquivo["name"]!="" AND (!stristr($arquivo["type"],"jpeg") AND !stristr($arquivo["type"],"pjpeg") AND !stristr($arquivo["type"],"png") AND !stristr($arquivo["type"],"x-png") AND !stristr($arquivo["type"],"gif"))) { echo '<script>window.alert("Tipo de arquivo inválido\nVocê será redirecionado para a página anterior."); </script>'; echo"<meta HTTP-EQUIV='Refresh' CONTENT = '0; URL= http://url_de_destino'>"; exit; } if($arquivo["size"] > 512000){ echo '<script>window.alert("O tamanho da imagem pode ter no máximo 500 kb."); </script>'; echo"<meta HTTP-EQUIV='Refresh' CONTENT = '0; URL= http://url_de_destino'>"; exit; } if (isset($arquivo['name']) AND (stristr($arquivo['type'],"jpeg") OR stristr($arquivo['type'],"pjpeg"))) { $tipo_imagem = "jpg"; } elseif (isset($arquivo['name']) AND (stristr($arquivo['type'],"png") OR stristr($arquivo['type'],"x-png"))) { $tipo_imagem = "png"; } elseif (isset($arquivo['name']) AND (stristr($arquivo['type'],"gif"))) { $tipo_imagem = "gif"; } $imagem_modificada = $arquivo["name"]; $imagem_modificada = str_replace(" ", "_", $imagem_modificada); $imagem_modificada = str_replace("-", "_", $imagem_modificada); $arquivo_temp = $arquivo["tmp_name"]; $imagem_modificada = str_replace(" ", "_", $imagem_modificada); $imagem_modificada = str_replace("-", "_", $imagem_modificada); $pasta_dir = "$diretorio_raiz"."imagens/";//diretorio dos arquivos //se nao existir a pasta ele cria uma $imagem_uploader = $pasta_dir . $imagem_modificada; // Faz o upload da imagem move_uploaded_file($arquivo_temp, $imagem_uploader); $imagem = "http://url_do_site/imagens/" . $imagem_modificada; } //////////////// Redimensionar imagem /////////////////////////////////////////////// // declara os tamanhos $x = 317; $y = 441; // verifica se o arquivo existe if (!file_exists($imagem_uploader)) { echo $imagem . " não encontrada"; exit; } // vamos ler a imagem if ($tipo_imagem == "jpg") { $lerimagem = imagecreatefromjpeg($imagem_uploader); } elseif ($tipo_imagem == "png") { $lerimagem = imagecreatefrompng($imagem_uploader); } elseif ($tipo_imagem == "gif") { $lerimagem = imagecreatefromgif($imagem_uploader); } // pegar a largura da imagem $img_largura = imagesx($lerimagem); // pegar a altura da imagem $img_altura = imagesy($lerimagem); // dar um nome padrão para a miniatura $nome_miniatura = explode('.',$imagem_uploader); $nome_miniatura = $nome_miniatura[0].".$tipo_imagem"; // Agora sim a gente pode criar a imagem // definir o tamanho da nova imagem $nova = imagecreatetruecolor($x,$y); // agora é só copiar a imagem original para dentro da nova imagem imagecopyresampled($nova,$lerimagem,0,0,0,0,$x+1,$y+1,$img_largura,$img_altura); // salve o arquivo if ($tipo_imagem == "jpg") { imagejpeg($nova,$nome_miniatura); } elseif ($tipo_imagem == "png") { imagepng($nova,$nome_miniatura); } elseif ($tipo_imagem == "gif") { imagegif($nova,$nome_miniatura); } // Pronto, fim. Libera a memória usada imagedestroy($lerimagem); imagedestroy($nova); //////////////////////////////////////////////////////////////////////////////////////////////////////// } Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Junho 7, 2008 Ultimate, o script em questão é do Otavio e o que estamos discutindo é sobre um problema no formato de alguns arquivos JPG a questão foi solucionada graças à dica do silverfox e ao empenho do Otavio valew t+ Compartilhar este post Link para o post Compartilhar em outros sites
canino 0 Denunciar post Postado Agosto 11, 2008 Olá Otavio, não sei se já resolveu de outras formas o problema, mas o meu foi unica e exclusivamente problema com o tamanho da imagem q estava enviando! Fui no php.ini e mudei a linha upload_max_filesize = 2M para 3M ... simples assim... t+ Compartilhar este post Link para o post Compartilhar em outros sites