Problema con funzione "imagecreatefrompng"

Discussione in 'PHP' iniziata da saverio_web, 25 Giugno 2015.

  1. saverio_web

    saverio_web Utente Attivo

    Registrato:
    1 Novembre 2011
    Messaggi:
    52
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Località:
    La Spezia
    Home Page:
    Buona sera ragazzi, sto lavorando ad un gestionale in PHP e ho riscontrato un problema in una funzione che permette la creazione di miniature di foto che vengono caricate.

    Mi spiego meglio: attraverso un form procedo alla creazione di un album, i dati vengono controllati e caricati sul server e le foto vengono caricate; fino a qui tutto bene. Siccome però le immagini risultano troppo pesanti da caricare, ho inserito una funzione che mi permette di creare delle miniature delle foto caricate; ed ora arriva il problema: se effettuo questa operazione su immagini JPG il problema non sussiste, le miniature vengono correttamente create, se utilizzo la stessa funzione su immagini in formato PNG si formano "immagini" di 0 byte e non visualizzabili. Accade raramente che si creino immagini tutte nere.

    I codici sono i seguenti:
    Questo fa riferimento alla funzione per le immagini PNG
    PHP:
                $extimg=substr($_FILES["photo$p"]["type"], 63);
                if(
    $extimg=='png') {
                    
    $img2 imagecreatefrompng($img);
                    
    $thumb=ImageCreateTrueColor($nw,$nh);
        
                    
    $wm $w/$nw;
                    
    $hm $h/$nh;
        
                    
    $h_height $nh/2;
                    
    $w_height $nw/2;
        
                    if(
    $w $h){
        
                        
    $adjusted_width $w $hm;
                        
    $half_width $adjusted_width 2;
                        
    $int_width $half_width $w_height;
        
                        
    ImageCopyResampled($thumb,$img2,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
                        
    imagePNG($thumb,$thname,95); 
        
                    }elseif((
    $w $h) || ($w == $h)){
        
                        
    $adjusted_height $h $wm;
                        
    $half_height $adjusted_height 2;
                        
    $int_height $half_height $h_height;
        
                        
    ImageCopyResampled($thumb,$img2,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h); 
                        
    ImagePNG($thumb,$thname,95); 
        
                    }else{
                        
    ImageCopyResampled($thumb,$img2,0,0,0,0,$nw,$nh,$w,$h);     
                        
    ImagePNG($thumb,$thname,95); 
                    }
                    
                }
    Quest, che funziona, a quelle in JPG
    PHP:
                else {
                    
    $img2 ImageCreateFromJpeg($img);
                    
    $thumb=ImageCreateTrueColor($nw,$nh);
        
                    
    $wm $w/$nw;
                    
    $hm $h/$nh;
        
                    
    $h_height $nh/2;
                    
    $w_height $nw/2;
        
                    if(
    $w $h){
        
                        
    $adjusted_width $w $hm;
                        
    $half_width $adjusted_width 2;
                        
    $int_width $half_width $w_height;
        
                        
    ImageCopyResampled($thumb,$img2,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h); 
                        
    ImageJPEG($thumb,$thname,95); 
        
                    }elseif((
    $w $h) || ($w == $h)){
        
                        
    $adjusted_height $h $wm;
                        
    $half_height $adjusted_height 2;
                        
    $int_height $half_height $h_height;
        
                        
    ImageCopyResampled($thumb,$img2,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h); 
                        
    ImageJPEG($thumb,$thname,95); 
        
                    }else{
                        
    ImageCopyResampled($thumb,$img2,0,0,0,0,$nw,$nh,$w,$h);     
                        
    ImageJPEG($thumb,$thname,95); 
                    }
                }
    Ovviamente le immagini temporanee vengono poi distrutte tramite la funzione "imagedestroy".

    Vi ringrazi in anticipo :fonzie:
     
  2. maiothelegend

    maiothelegend Nuovo Utente

    Registrato:
    25 Giugno 2015
    Messaggi:
    2
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    .

    Inviato dal mio GT-I9195 utilizzando Tapatalk
     
  3. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.573
    Mi Piace Ricevuti:
    127
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    magari se postassi la valorizzazione di $w, $h, $nw, $nh e $wm aiuterebbe a riprodurre il caso
    altrimenti si devono dare i numeri ...
    ciao
     
  4. saverio_web

    saverio_web Utente Attivo

    Registrato:
    1 Novembre 2011
    Messaggi:
    52
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Località:
    La Spezia
    Home Page:
    Questa è la parte subito prima i codici prima postati. La variabile $dir rappresenta la directory di destinazione dell'immagine $ipath la directory dove è stata caricata la immagine (uguale a $dir) e $tpath rappresenta la directory dove verrà caricata la miniatura.
    PHP:
                $nw=350;
                
    $nh=262;

                
    $ipath $dir;
                
    $tpath $dir."thumb";

                if (
    is_dir("$tpath")) {}
                else {
                    
    mkdir("$tpath");
                }


                
    $img="$ipath$_FILES["photo$p"]["name"];

                
    $dimensions GetImageSize($img);

                
    $thname "$tpath/" $_FILES["photo$p"]["name"];

                
    $w=$dimensions[0];
                
    $h=$dimensions[1];
     
  5. saverio_web

    saverio_web Utente Attivo

    Registrato:
    1 Novembre 2011
    Messaggi:
    52
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Località:
    La Spezia
    Home Page:
    Nessuno può aiutarmi? :(
     
  6. maiothelegend

    maiothelegend Nuovo Utente

    Registrato:
    25 Giugno 2015
    Messaggi:
    2
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    No

    Inviato dal mio GT-I9195 utilizzando Tapatalk
     
  7. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.573
    Mi Piace Ricevuti:
    127
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    in questo momento, il codice che hai postato taglia l'immagine, non la riduce
     
  8. saverio_web

    saverio_web Utente Attivo

    Registrato:
    1 Novembre 2011
    Messaggi:
    52
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Località:
    La Spezia
    Home Page:
    Dici quello riferito alle immagini PNG? Dov'è l'errore? :confused:
     
  9. saverio_web

    saverio_web Utente Attivo

    Registrato:
    1 Novembre 2011
    Messaggi:
    52
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Località:
    La Spezia
    Home Page:
    Grazie mille ho trovato l'errore ed ora funziona :D

    SE VOLETE POTETE CHIUDERE LA DISCUSSIONE
     
  10. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.573
    Mi Piace Ricevuti:
    127
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    se posti la soluzione funzionante, può servire ad altri
    ciao
     
  11. saverio_web

    saverio_web Utente Attivo

    Registrato:
    1 Novembre 2011
    Messaggi:
    52
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Località:
    La Spezia
    Home Page:
    Questo è la parte di codice completo funzionante, che verifica l'estensione dell'immagine caricata e ne crea una miniatura. Spero possa essere utilile. :D

    PHP:
                $nw=350;
                
    $nh=262;

                
    $ipath $dir;
                
    $tpath $dir."thumb";

                if (
    is_dir("$tpath")) {}
                else {
                    
    mkdir("$tpath");
                }


                
    $img="$ipath$_FILES["photo$p"]["name"];

                
    $dimensions GetImageSize($img);

                
    $thname "$tpath/" $_FILES["photo$p"]["name"];
                
    //echo "<br>$img<br> $ipath<br> $tpath<br> $thname";die ();

                
    $w=$dimensions[0];
                
    $h=$dimensions[1];

                
                
    $extimg=substr($_FILES["photo$p"]["type"], 63);
                if(
    $extimg=='png') {
                    
    $img2 ImageCreateFromPNG($img);
                    
    $thumb=ImageCreateTrueColor($nw,$nh);
        
                    
    $wm $w/$nw;
                    
    $hm $h/$nh;
        
                    
    $h_height $nh/2;
                    
    $w_height $nw/2;
        
                    if(
    $w $h){
        
                        
    $adjusted_width $w $hm;
                        
    $half_width $adjusted_width 2;
                        
    $int_width $half_width $w_height;
        
                        
    ImageCopyResampled($thumb,$img2,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h); 
                        
    ImagePNG($thumb,$thname,9); 
        
                    }elseif((
    $w $h) || ($w == $h)){
        
                        
    $adjusted_height $h $wm;
                        
    $half_height $adjusted_height 2;
                        
    $int_height $half_height $h_height;
        
                        
    ImageCopyResampled($thumb,$img2,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h); 
                        
    ImagePNG($thumb,$thname,95); 
        
                    }else{
                        
    ImageCopyResampled($thumb,$img2,0,0,0,0,$nw,$nh,$w,$h);     
                        
    ImagePNG($thumb,$thname,95); 
                    }
                }
                else {
                    
    $img2 ImageCreateFromJpeg($img);
                    
    $thumb=ImageCreateTrueColor($nw,$nh);
        
                    
    $wm $w/$nw;
                    
    $hm $h/$nh;
        
                    
    $h_height $nh/2;
                    
    $w_height $nw/2;
        
                    if(
    $w $h){
        
                        
    $adjusted_width $w $hm;
                        
    $half_width $adjusted_width 2;
                        
    $int_width $half_width $w_height;
        
                        
    ImageCopyResampled($thumb,$img2,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h); 
                        
    ImageJPEG($thumb,$thname,95); 
        
                    }elseif((
    $w $h) || ($w == $h)){
        
                        
    $adjusted_height $h $wm;
                        
    $half_height $adjusted_height 2;
                        
    $int_height $half_height $h_height;
        
                        
    ImageCopyResampled($thumb,$img2,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h); 
                        
    ImageJPEG($thumb,$thname,95); 
        
                    }else{
                        
    ImageCopyResampled($thumb,$img2,0,0,0,0,$nw,$nh,$w,$h);     
                        
    ImageJPEG($thumb,$thname,95); 
                    }
                }

                
    imagedestroy($img2);
     
Sto caricando...

Condividi questa Pagina