Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505

    visualizzare immagini di grandi dimensioni mantenendo la pagina leggera

    salve. io avrei questo problema.

    Io carico delle foto dal server (che sono salvate sul server tramite una pagina di upload) di dimensioni anche alte, per esempio 2186x2112px. poi le visualizzo, tramite regole di css, di dimensioni massime 300x300px. Il problema è che quelle foto vengono solo visualizzate con quelle dimensioni, ma in realtà vengono trattate con le dimensioni originali, e quando ho parecchie foto di tali dimensioni la pagina html è pesantemente lenta (nel sfogliarla per esempio).

    come posso fare? magari un resize lato server quando viene fatto l'upload (cosa che gli utenti possono fare)?

    per ora lo script che ho per le immagini è questo :
    Codice PHP:
    //gestisco le foto server side
        
    if(($_FILES['userfile1']['tmp_name']!="") or ($_FILES['userfile2']['tmp_name']!=""
        or (
    $_FILES['userfile3']['tmp_name']!="") or ($_FILES['userfile4']['tmp_name']!="")) {
            
    // controllo che le foto siano effettivamente foto
            
    for($i=1$i<=4$i++) {
                if (
    $_FILES['userfile'.$i]['tmp_name']!="") {
                    
    $path_parts=pathinfo($_FILES['userfile'.$i]['name']);
                    if(
    strtolower($path_parts['extension'])=='jpg') {
                    } elseif(
    strtolower($path_parts['extension'])=='jpeg') {
                    } elseif(
    strtolower($path_parts['extension'])=='gif') {
                    } elseif(
    strtolower($path_parts['extension'])=='png') {
                    } elseif(
    strtolower($path_parts['extension'])=='bmp') {
                    } else {
                        
    $wrong=1;
                    }
                }
            }
            
            
    // controllo che le foto vadano bene. altrimenti annullo
            
    if(isset($wrong)) {
                
    $abort=1;
                
    $messaggio="Errore - Formato delle foto non valido. Assicurati che il formato sia jpg, jpeg, gif, bmp, png";
            } else {
                
    // creo cartella photo per questo articolo
                
    mkdir("./articles/photos/".$articleid);
                
    // gestisco la/le foto indice i
                
    $sql="";
                for(
    $i=1$i<=4$i++) {
                    if (
    $_FILES['userfile'.$i]['tmp_name']!="") {
                        
    // imposto parametri photo
                        
    $photoid=$articleid."-".$i;
                        
    $uploaddir="./articles/photos/".$articleid."/";
                        
    $userfile_tmp=$_FILES['userfile'.$i]['tmp_name'];            
                        
    $userfile_name=$_FILES['userfile'.$i]['name'];

                        
    // lo rinomino (unicità file)
                        
    $userfile_name=$photoid."@".trim(str_replace(" """$_FILES['userfile'.$i]['name']));

                        
    // copio la foto nella cartella nel server
                        
    $path_parts=pathinfo($_FILES['userfile'.$i]['name']);
                        
    $photoondb=$photoid.".".strtolower($path_parts['extension']);
                        
    move_uploaded_file($userfile_tmp$uploaddir.$photoondb);

                        if(
    $sql!=""$sql.=", ";
                        
    $sql.="('$articleid', '$photoondb')";
                    }
                }
                
                
    // inserisco riferimento articolo-photo nel database                        
                
    if($sql!=""$insert=mysql_query("INSERT INTO articles_photos (articleid, photoid) VALUES $sql",$mydb);
            }
        }

    //client side per inviarle
    <div class="addarticletable2">
        <
    input name="userfile1" type="file" value="CHOOSE">
        <
    input type="hidden" value="1" name="photo1"></input>
        <
    input name="userfile2" type="file" value="CHOOSE">
        <
    input type="hidden" value="1" name="photo2"></input>
        <
    input name="userfile3" type="file" value="CHOOSE">
        <
    input type="hidden" value="1" name="photo3"></input>
        <
    input name="userfile4" type="file" value="CHOOSE">
        <
    input type="hidden" value="1" name="photo4"></input>
    </
    div
    magari avete una soluzione. Grazie

  2. #2
    si, corretto, ti crei una versione più piccola delle foto (cosiddette "thumbnails") che carichi come anteprima, se uno vuole vedere la foto nella dimensione originale deve cliccarci sopra

    quindi quando carichi la foto salvi l'originale normalmente e (prima o dopo) crei anche una versione ridotta con le gd (se cerchi sul forum ci sono fior di argomenti su come usare le gd per ridimensionare le foto)

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    perfetto ora ci smanetto un pò. unico problemi è che dovrei ridimensionarla mantenendo le "dimensioni" dell'originale (nel senso, se è 2000x1000px non posso farla 100x100px, la schiaccia troppo).

    uhm...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    inoltre, non capisco il perchè non riesco (tramite lo script sopra) a inviare foto superiori ad una certa dimensione (per esempio quelle sopra i 3 mega vengono scartate). non arrivano proprio al server, cioè la variabile $_FILES['userfile1'] non arriva neanche. sembra che lato client non la invii.

    qualche idea?

  5. #5
    Originariamente inviato da markzzz
    inoltre, non capisco il perchè non riesco (tramite lo script sopra) a inviare foto superiori ad una certa dimensione (per esempio quelle sopra i 3 mega vengono scartate)...

    qualche idea?
    Dipende dalla configurazione del server: http://www.php.net/manual/en/ini.cor...d-max-filesize

  6. #6
    oltre al problema della massima dimensione del file c'è anche la questione della massima dimensione di memoria utilizzabile dallo script per effettuare il ridimensionamento (dato che la foto deve essere decompressa dalle librerie gd per poterci lavorare sopra). Quindi se riesci a risolvere quello poi controlla anche la massima dimensione per script utilizzabile da php.

    in ogni caso per ridimensionare mantenendo le stesse proporzioni è il meno, se hai una foto 2420x1000 che devi ridimensionare a 500px massimo per lato, prendi il lato maggiore della foto originale, lo dividi per la dimensione massima della foto ridimensionata e hai il fattore di conversione, per lo stesso fattore dividi anche il lato minore della foto originale.

    2420 / 500 = 4.84
    1000 / 4.84 ~ 206

    2420 / 1000 = 2.42
    500 / 206 ~ 2.42

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    ok. per la dimensione massima via server (ho impostato 4mb massimo) e per la ri-dimensione della immagine sono apposto. Ora dovrei capire quale è il problema dello script php (infatti se carico più di 2 foto con quella dimensione non funziona..se provo con 3 semplici si, quindi credo sia quello). dove trovo questo punto?

    per ora il codice è questo (ammetto solo jpeg/jpg...e in entrambi i casi i file li rinomino .jpg, dovrebbe essere corretto alla fine per quanto ne sò cambia solo l'estensione) :
    Codice PHP:
    if(($_FILES['userfile1']['tmp_name']!="") or ($_FILES['userfile2']['tmp_name']!=""
    or (
    $_FILES['userfile3']['tmp_name']!="") or ($_FILES['userfile4']['tmp_name']!="")) {
        
    // controllo che le foto JPG/JPEG e massimo 4 megabyte
        
    for($i=1$i<=4$i++) {
            if (
    $_FILES['userfile'.$i]['tmp_name']!="") {
                
    $path_parts=pathinfo($_FILES['userfile'.$i]['name']);
                if(((
    strtolower($path_parts['extension'])=='jpg') or (strtolower($path_parts['extension'])=='jpeg')) 
                && (
    $_FILES['userfile'.$i]['size']<=4194304)) {
                } else {
                    
    $wrong=1;
                }
            }
        }
        
        
    // controllo che le foto vadano bene. altrimenti annullo
        
    if(isset($wrong)) {
            
    $abort=1;
            
    $messaggio="Errore - Formato delle foto non valido. Assicurati che il formato sia jpg/jpeg e che la foto non superi i 3 Megabyte";
        } else {
            
    // creo cartella photo/thumbs per questo articolo
            
    mkdir("./articles/photos/".$articleid);
            
    mkdir("./articles/photos/thumbs/".$articleid);
            
    // gestisco la/le foto indice i
            
    $sql="";
            for(
    $i=1$i<=4$i++) {
                if (
    $_FILES['userfile'.$i]['tmp_name']!="") {
                    
    // imposto parametri photo
                    
    $photoid=$articleid."-".$i;
                    
    $uploaddir="./articles/photos/".$articleid."/";
                    
    $userfile_tmp=$_FILES['userfile'.$i]['tmp_name'];            
                    
    $userfile_name=$_FILES['userfile'.$i]['name'];

                    
    // lo rinomino (unicità file)
                    
    $userfile_name=$photoid."@".trim(str_replace(" """$_FILES['userfile'.$i]['name']));

                    
    // copio la foto nella cartella nel server
                    
    $path_parts=pathinfo($_FILES['userfile'.$i]['name']);
                    
    $photoondb=$photoid.".".strtolower($path_parts['extension']);
                    
    move_uploaded_file($userfile_tmp$uploaddir.$photoondb);
                    
                    
    // creo i thumbs
                    
    $name_new_image="./articles/photos/thumbs/".$articleid."/".$photoondb;
                    
    $file "./articles/photos/".$articleid."/".$photoondb;
                    
                    list(
    $actualw$actualh$type$attr) = getimagesize($file);
                    if((
    $actualw>100) or ($actualh>100)) {
                        if(
    $actualw>$actualh) {
                            
    $v1=$actualw/100;
                            
    $width=$actualw/$v1;
                            
    $height=$actualh/$v1;
                        } else {
                            
    $v1=$actualh/100;
                            
    $width=$actualw/$v1;
                            
    $height=$actualh/$v1;
                        }
                    }
                    
    $qualita=100;
                    
    $new_image=imagecreatetruecolor($width$height);
                    
    $src_image=imagecreatefromjpeg($file);
                    
    imagecopyresized($new_image$src_image0000$width$heightimagesx($src_image), imagesy($src_image));
                    
    imagejpeg($new_image$name_new_image$qualita);                                    

                    if(
    $sql!=""$sql.=", ";
                    
    $sql.="('$articleid', '$photoondb')";
                }
            }
        }


  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    persi?

    quindi quale direttiva usare per aumentare la dimensione dello script in esecuzione?

  9. #9

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    uhm, io lo ho impostato su memory_limit = 128M

    non credo che quello script occupi così tanto per 4 foto da 4 mega l'una! ci dev'essere qualche altro problema...uhm...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.