wills 0 Denunciar post Postado Agosto 20, 2013 Fala galera!Estou com um sistema onde o usuário faz upload de um arquivo .zip, dentro deste arquivo terá algumas imagens onde terei que descompactar no servidor e redimensionar as imagens. Montei a parte do upload, recebo o arquivo e descompacto em uma pasta específica, o problema é: redimensionar as imagens após isso.Alguém tem um sugestão?Vou postar parte do fonte. $zip = new ZipArchive(); if( $zip->open($local) === true){ for ($i = 0; $i < $zip->numFiles; $i++) { $extension_zip = strchr($zip->getNameIndex($i), "."); $file_zip = sha1($zip->getNameIndex($i)) . $extension_zip; $zip->renameName($zip->getNameIndex($i), $file_zip); $insert = mysql_query("INSERT INTO PROJECT (NM_PROJECT,DS_PROJECT,NM_PHOTO,NM_ZIP_ORIGINAL,NM_ZIP,USER_ID,FOLDER_ID,DT_ACTIVE) VALUES ('$project','$description','$file_zip','$archive','$file_archive',$user_id,$folder_id,'$date')") or die("Erro: " . mysql_error()); $update = mysql_query("UPDATE FOLDER SET SOURCE = '$souce_folder', FL_ACTIVE = 1 WHERE FOLDER_ID = $folder_id") or die("Erro: " . mysql_error()); } $zip->close(); } $zipOpen = new ZipArchive(); if( $zipOpen->open($local) === true){ $zipOpen->extractTo('../assets/upload/client/' . $name_folder . "/" . $souce_folder); $zipOpen->close(); } Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Agosto 20, 2013 Recomendo que use uma biblioteca pronta para tratamento de imagens, como por exemplo a WideImage. Compartilhar este post Link para o post Compartilhar em outros sites
wills 0 Denunciar post Postado Agosto 20, 2013 eu estou usando uma, porém onde eu uso é após submeter a imagem, ai fica BEM mais fácil.Meu problema está em redimensionar após descompactar no servidor. Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Agosto 20, 2013 Você disse que descompacta o arquivo e coloca as imagens em um diretório específico, então você precisa varrer este diretório e ir redimensionando imagem por imagem. Para varrer o diretório você pode usar a SPL DirectoryIterator ou a função scandir. Compartilhar este post Link para o post Compartilhar em outros sites
wills 0 Denunciar post Postado Agosto 20, 2013 Eu estou tentando com o scandir, porém ele só da resize na primeira imagem... ele não faz no restante. $dir = "assets/upload/client/cna/20-08-2013-12-28-30/"; $item = scandir($dir); $count = count($item); for($i=0; $i < $count; $i++){ if($item[$i] != '.' && $item[$i] != '..' && $item[$i] != '.DS_Store'){ $resizeProfile = new resize("assets/upload/client/cna/20-08-2013-12-28-30/" . $item[$i]); $resizeProfile -> resizeImage(107, 107, 'crop'); $resizeProfile -> saveImage("assets/upload/client/cna/20-08-2013-12-28-30/thumb-" . $item[$i], 100); } } Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Agosto 20, 2013 Ocorre algum erro (erro de timeout por exemplo) ou nada? Compartilhar este post Link para o post Compartilhar em outros sites
wills 0 Denunciar post Postado Agosto 20, 2013 nada.... Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Agosto 20, 2013 Estranho, eu testei o seu loop aqui com um diretório local e funcionou.Tente usar o caminho absoluto até o diretório e faça uma verificação pra ver se é possível escrever no diretório. $dir = __DIR__ . '/assets/upload/client/cna/20-08-2013-12-28-30'; if (!is_writable($dir)) { exit('Não é possível escrever no diretório "' . $dir . '".'); } $files = scandir($dir); foreach ($files as $file) { if (in_array($file, array('.', '..', '.DS_Store'))) { continue; } $resize = new resize($dir . '/' . $file); $resize->resizeImage(107, 107, 'crop'); $resize->saveImage($dir . '/thumb-' . $file, 100); } No início do script coloque isto para habilitar as mensagens de erro do PHP: error_reporting(E_ALL | E_STRICT); ini_set('display_errors', true); E coloque isto para evitar timeout no script: set_time_limit(0); Compartilhar este post Link para o post Compartilhar em outros sites
wills 0 Denunciar post Postado Agosto 20, 2013 O estranho é que ele lista, porém se eu mandar dar o resize, ele só faz no primeiro índice... Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Agosto 20, 2013 Tinha um errinho ali no meu if, eu tinha esquecido de colocar o ponto de exclamação. Eu editei e corrigi o último post. if (!is_writable($dir)) { Compartilhar este post Link para o post Compartilhar em outros sites
wills 0 Denunciar post Postado Agosto 20, 2013 poderia ser a minha classe do resize? Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Agosto 21, 2013 Sim, se você testou o loop e está listando corretamente os arquivos e é possível escrever no diretório, é bem provável que o problema esteja nesta classe. Você tentou usar o caminho absoluto e ativar as mensagens de erro? Compartilhar este post Link para o post Compartilhar em outros sites
wills 0 Denunciar post Postado Agosto 21, 2013 se eu utilizar absoluto ele da erro, não encontra o diretório.estou achando que é a classe porque eu listo o diretório, porém ele da resize apenas no primeiro índice.eu estou utilizando a classe ResizeImage, tem alguma referência para eu testar? Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Agosto 21, 2013 Não deveria dar erro ao usar o caminho absoluto e ele é melhor pra evitar erros. Você pode tentar aquela outra biblioteca que eu indiquei no post #2. Compartilhar este post Link para o post Compartilhar em outros sites
wills 0 Denunciar post Postado Agosto 21, 2013 testei com sua lib...olha isso: Fatal error: Uncaught exception 'WideImage_UnknownImageOperationException' with message 'Can't load 'Resize' operation.' in /Users/will/Sites/4V/lib/OperationFactory.php:51 Stack trace: #0 /Users/will/Sites/4V/lib/Image.php(443): WideImage_OperationFactory::get('Resize') #1 /Users/will/Sites/4V/lib/Image.php(489): WideImage_Image->getOperation('Resize') #2 /Users/will/Sites/4V/dir.php(15): WideImage_Image->resize(400, 300) #3 {main} thrown in /Users/will/Sites/4V/lib/OperationFactory.php on line 51 é, o problema não é na classe... eu mudei e mesmo assim só deu resize no primeiro índice.alguma idéia? Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Agosto 21, 2013 Eu testei o seu loop e depois montei outro código pra você e os dois funcionaram pra listagem dos arquivos. Mostre como está todo o seu código pra eu ver se consigo identificar algum erro nele. Compartilhar este post Link para o post Compartilhar em outros sites
wills 0 Denunciar post Postado Agosto 21, 2013 Eu fiz um teste no servidor, com imagens acima de de 1mb, não consigo dar o resize. Os testes que fiz foram com imagens de no máximo 200kb, ai deu tudo certo.Meu problema está agora no tamanho das imagens, já que o resize funciona. Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Agosto 21, 2013 Sugestão, use o ImageMagick @braços Compartilhar este post Link para o post Compartilhar em outros sites
wills 0 Denunciar post Postado Agosto 21, 2013 Será que com ele conseguiria resolver meus problemas com os tamanhos das imagens? Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Agosto 21, 2013 Olha, utilizo ele para arquivos bem maiores e não tenho problemas. Só verifique a questão de tamanho máximo de upload que sua hospedagem aceita. Compartilhar este post Link para o post Compartilhar em outros sites