• User

    Upload immagine e creazione miniature

    Ciao a tutti, ho un problema con il ridimensionamento di un'immagina...

    Eseguo l'upload di un file JPG (o JPEG), fin qui tutto ok, creo due miniature di dimensioni differenti e le salvo in due cartelle del server.
    Il tutto funziona correttamente, ma quando vado a vedere i file appena creati noto che la miniatura più grande è molto (ma molto) più scura del file originale.
    Posto il codice, spero che qualcuno sappia darmi una mano...

    
    ...
    if(move_uploaded_file($_FILES['txt_file']['tmp_name'], $upload))
    {
        //Upload eseguito con successo
        $img = $upload;                          // percorso al file dell'immagine
        $dest_o = "img/" . $uploadfile;          // directory di salvataggio della miniatura grande
        $dest_m = "img/min/" . $uploadfile;      // directory di salvataggio della miniatura piccola
    
        // dimensioni ridotte della miniatura grande da creare
        list($o_width, $o_height, $o_type, $o_attr) = getimagesize($img);
        if ( ($o_width > $o_height) && ($o_width > 307) )
        {
            $thumbWidth_o = 307;
            $thumbHeight_o = $o_height * 307 / $o_width;    // per mantenere le proporzioni
        }
        else
        {
            if ($o_height > 230)
            {
                $thumbHeight_o = 230;
                $thumbWidth_o = $o_width * 230 / $o_height;
            }
            else
            {
                $thumbHeight_o = $o_height;
                $thumbWidth_o = $o_width;
            }
        }
    
        // dimensioni miniatura piccola da creare
        list($m_width, $m_height, $m_type, $m_attr) = getimagesize($img);
        if (( $m_width > $m_height) && ($m_width > 100) )
        {
            $thumbWidth_m = 100;
            $thumbHeight_m = $m_height * 100 / $m_width;
        }
        else
        {
            if ($m_height > 100)
            {
                $thumbHeight_m = 100;
                $thumbWidth_m = $m_width * 100 / $m_height;
            }
            else
            {
                $thumbHeight_m = $m_height;
                $thumbWidth_m = $m_width;
            }
        }
    
        $thumb_o = imagecreate($thumbWidth_o, $thumbHeight_o) or die("Impossibile creare la miniatura");
        $thumb_m = imagecreate($thumbWidth_m, $thumbHeight_m) or die("Impossibile creare la miniatura");
    
        $src_o = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale");
        $src_m = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale");
    
        imagecopyresized($thumb_o, $src_o, 0, 0, 0, 0, $thumbWidth_o, $thumbHeight_o, imageSx($src_o), imageSy($src_o)) or   die("Impossibile ridimensionare l'immagine");
        imagecopyresized($thumb_m, $src_m, 0, 0, 0, 0, $thumbWidth_m, $thumbHeight_m, imageSx($src_m), imageSy($src_m)) or   die("Impossibile ridimensionare l'immagine");
    
        if (imagejpeg($thumb_o, $dest_o))
            echo "Immagine salvata";
        else
            die("Impossibile salvare la miniatura");
    
        if (imagejpeg($thumb_m, $dest_m))
            echo "Miniatura salvata";
        else
            die("Impossibile salvare la miniatura");
    }
    ...
    
    

    Grazie!!!
    Teox


  • User Attivo

    Prova a sostituire imagecopyresized con imagecopyresampled.
    Ti consiglio anche di usare una sola di queste due:

        $src_o = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale"); 
        $src_m = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale"); 
    
        $src = imagecreatefromjpeg($img) or die ("Impossibile aprire l'immagine originale"); 
    
    

    E poi usare $src invece che $src_o e $src_m

    Così risparmi parecchia memoria in elaborazione


  • User

    Grazie per la risposta tempestiva!!!

    Ho provato ad utilizzare la funzione "imagecopyresampled", ma il problema persiteva...
    Ho cercato le specifiche di "imagecopyresized" sul manuae di php (http://it2.php.net/manual/it/function.imagecopyresized.php), in una nota dice che ci sono alcuni problemi...

    Nota: There is a problem due to palette image limitations (255+1 colors).
    ...e per risolverli...

    To skip this problem, please use a truecolor image as a destination image, such as one created by imagecreatetruecolor().

    Il mio inglese è piuttosto scarso, ma, da quello che ho capito dovevo sostituire l'imagecreate con l'imagecreatetruecolor.

    Modifiche fatte e problema RISOLTO!!! :vai:

    Grazie, ciao a todos!

    elTeox