• User Newbie

    Errore nel creare miniature da immagini caricate su un mio form di un mio sito

    Ciao a tutti,

    Ecco il mio problema.
    Vorrei creare una gallery con delle miniature (thumbnails) dalle foto/immagini che i vari utenti possono caricare da un form sul mio sito.

    Dopo i controlli sul file caricato, la pagina, alla quale dopo il login (uso le sessioni) ogni singolo utente può accedere, che dovrebbe contenere la gallery con le miniature create 'al volo' con PHP che ho chiamato vision.php non funziona a dovere.

    Questa vision.php richiama a sua volta un mio nuovo script che dovrebbe crearle appunto 'on the fly', ma dove sbaglio evidentemente qualcosa.... Questo script si chiama thumb.php.

    Mi sono creato in precedenza una tabella sul mio db MySQL, così:

    **CREATE TABLE uploaded (id_file INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, url_file VARCHAR(50) NOT NULL, nome_file VARCHAR(100) NOT NULL, tipo_file VARCHAR(20) NOT NULL, descrizione VARCHAR(255), note TEXT, data_inserimento DATETIME NOT NULL, indirizzo_IP CHAR(15) NOT NULL, username VARCHAR(20) NOT NULL, id_user INT(11) NOT NULL, PRIMARY KEY(id_file));

    **Ora, da vison.php riesco ad estrarre solo i nomi dei files caricati oppure le loro estensioni ma non, come dovrei, le miniature o thumbnails!!!.

    In vision.php richiamo le miniature in questo modo:

    [PHP]
    echo '<img src="thumb.php?id_file=' . $row['id_file'] . '" alt="' . $row['id_file'] . '" />
    <br /><br /><br />';][/PHP]

    e vorrei aggiungere, se può essere utile ora, tutto lo script in questione, ovvero il** vision.php**:

    [PHP]
    <?php
    //continuo la sessione
    session_start();

    require_once 'config_db.php';              
    

    ?>

    <!DOCTYPE ecc">
    <html xmlns="ecc" xml:lang="it" lang="it">
    <head>
    <?php
    include 'header.html';
    ?>

    <title>Visualizzazione</title>
    </head>

    <body class="no-js">
    <?php
    require 'sessione_loggati.php';
    ?>

    <!-- apertura del div centrale -->
    <div id="centrale">

    <?php

    try
        {    
            // Report all PHP errors
            error_reporting(-1);
                            
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
            
            $stmt = $pdo->prepare("SELECT * FROM uploaded WHERE id_user = ? ORDER BY id_file");
    
            // L'utente correttamente loggato cerca un file, uso le sessioni!
            $stmt->execute(array($_SESSION['id_user']));
     
             if ( $row = $stmt->fetch(PDO::FETCH_ASSOC) )
                 {     
                     // Qui uso un ciclo do/while
                     do
                         {
                             echo '<br /><br />Le tue immagini:' . '&nbsp; &nbsp; <a href="upload.php">Torna indietro</a><br /><br />';   
     
                            echo '<img src="thumb.php?id_file=' . $row['id_file'] . '" alt="' . $row['id_file'] . '" /> 
    

    <br /><br /><br />';

                         } 
                                                     
                     while ( $row = $stmt->fetch(PDO::FETCH_ASSOC) );                 
                 }
             else
                 {
                     echo '<br /><br /> <div class="centra">Ciao, ' . $_SESSION['username'] . ', non hai inviato per ora nessuna immagine.
    

    <br /><br /> <a href="upload.php">Inviami un'immagine, se lo desideri</a></div>';

                    include 'footer.php';
                    exit;
                 }
    
        } // fine blocco try {}
    catch (PDOException $e)
        {
            echo "Error!: " . $e->getMessage() . "<br />";
            die;        
        }    
    

    ?>

    <?php
    include 'footer.php';
    ?>
    [/PHP]

    mentre ecco il codice di thumb.php:

    [PHP]<?php
    // imposto gli header correttamente per avere una thumbnail SEMPRE in jpeg
    header('Content-type: image/jpeg');

    //continuo la sessione
    session_start();
    
    require_once 'config_db.php';
    
        
    try
        {
            //chmod("./uploaded/", 0777);
        
            // Report all PHP errors
            error_reporting(-1);
        
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);         
            
            // estraggo il nome e l'estensione dell'immagine    
            $stmt = $pdo->prepare("SELECT nome_file, tipo_file FROM uploaded WHERE id_file = ?");
    
            // Passo il parametro della querystring contenuto in vision.php
            $stmt->execute(array($_GET['id_file']));
            
            $row = $stmt->fetch(PDO::FETCH_ASSOC);                    
    
            switch ($row['tipo_file']) 
                {
                    case 'png':                        
                    // estraggo i dati da un'immagine png
                    $image = imagecreatefrompng('uploaded/' . $row['nome_file'] . '.' . $row['tipo_file']);
                    break;    
    
                    case 'jpg' || 'jpeg': 
                    $image = imagecreatefromjpeg('uploaded/' . $row['nome_file'] . '.' . $row['tipo_file']);
    
                    error_log("Miniatura NON creata, errore", 0);
                    break;
                
                    case 'gif':
                    $image = imagecreatefromgif('uploaded/' . $row['nome_file'] . '.' . $row['tipo_file']);
                    break;    
                
                    default:            
                    die('Impossibile rilevare il formato dell\'immagine');        
                }                
            
            $width = imagesx($image); // estraggo la width dell'immagine originale
            $height = imagesy($image); // estraggo la height dell'immagine originale
            
            // Definisco una dimensione della thumbnail di 250px, intesa come
            // dimensione del lato maggiore dell'immagine.
            $thumbsize = 250;
    
            // Calcolo ora un coefficiente di proporzione tale per cui il 
            // lato maggiore diventi 250, per farlo basta dividere la
            // dimensione che desidero con la dimensione di ciascuno dei due lati 
            // dell'immagine originale, e scegliere il risultato minore
            // con la funzione min()    
            $perc = min($thumbsize / $width, $thumbsize / $height);
    
            // Ora $perc conterrà il coefficiente che moltiplico 
            // per ciascuno dei lati dell'immagine a dimensione 
            // reale, ottenendo le dimensioni della thumbnail.
            $thumb_width = intval($perc * $width);
            $thumb_height = intval($perc * $height);        
                
            // creo la thumbnail con i nuovi parametri 
            $thumb = imagecreatetruecolor($thumb_width, $thumb_height); 
                    
            // infine copio l'immagine originale in questa nuova immagine, cioè nella thumbnail
            // con la funzione specifica per i ridimensionamenti imagecopyresampled()
            imagecopyresampled($thumb, $image, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height);
            
            // imposto anche la qualità a 80%, predefinita è a 75%: maggiore è  
            // la qualità che si vuole ottenere maggiore è anche il peso della 
            // della thumbnail e viceversa.
              imagejpeg($thumb, NULL, 80);         
            
            // distruggo la thumbnail per liberare memoria del server
            imagedestroy($thumb); 
            
        } // fine blocco try {}
    catch (PDOException $e)
        {
            echo "Error!: " . $e->getMessage() . "<br />";
            die;        
        }    
    

    ?> [/PHP]

    Aggiungo che la cartella uploaded ( quella dove gli utenti caricano le immagini) ha al suo interno le foto/immagini caricate e rinominate correttamente.
    Infatti sul db da phpMyAdmin vedo correttamente i dati inseriti.
    Ripeto che la fase di upload funziona perfettamente, ma non riesco ad ottenere queste thumbnails.

    Grazie in anticipo e un saluto a tutti.

    Ciao.