Ir para conteúdo

POWERED BY:

Arquivado

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

wills

Descompactar zip e redimensionar imagem

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

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