Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Strano comportamento librerie gd

    Salve a tutti,

    mi trovo a dovermi confrontare con un particolare problema legato alle galleri gd per la modifica delle immagini. Particamente attraverso due funzioni trovate in rete dovrei sostituire un colore presente in un'immagine con un'altro. Il problema sorge nel momento in cui l'immagine su cui vado a lavorare non sia una png, anzi un particolare tipo di png, ovvero se si tratta di una png/rgb la sostituzione del colore viene effettuata, se invece si tratta di una png/indexed la sostituzione non avviene.

    Siccome l'immagine di partenza è una gif ho provato, sempre tramite php, a convertirla in png ma il risultato è una png/indexed e quindi la sostituzione del colore non funziona.

    Posto il codice di seguito:

    Codice PHP:
    <?
    $img 
    imagecreatefromgif("PZE0832220053G.001.gif");
    imagepng($img"image.png");
    imagedestroy($img);



    function 
    html2rgb($input)
    {
        
    $input=($input[0]=="#")?substr($input1,6):substr($input0,6);
        return array(
        
    'r'=>hexdecsubstr($input02) ),
        
    'g'=>hexdecsubstr($input22) ),
        
    'b'=>hexdecsubstr($input42) )
        );
    }
    function 
    colorReplace($image,$oldcolor,$newcolor=false)
    {
        
    //make the colors rbg
        
    $rgbold html2rgb($oldcolor);
        
    //make the old color transparant
        
    $oldcolor imagecolorallocate($image$rgbold[r], $rgbold[g], $rgbold[b]);
        
    imagecolortransparent($image$oldcolor);
        if(
    $newcolor)
        {
            
    $rgbnew html2rgb($newcolor);
            
    //make a new image in the new color
            
    $newimage imagecreatetruecolor(imagesx($image), imagesy($image));
            
    //color the new image
            
    $newcolor imagecolorallocate($image,$rgbnew[r], $rgbnew[g], $rgbnew[b]);
            
    imagefill($newimage00$newcolor);

            
    //paste the old image on the new colored image
            
    imagecopymerge($newimage,$image,0,0,0,0imagesx($image), imagesy($image), 100);
            
    imagecopymerge($image,$newimage,0,0,0,0imagesx($image), imagesy($image), 100);
            
    imagedestroy($newimage);
        }
    }  
    header("Content-type: image/gif");
    $img3 imagecreatefrompng("image.png");
    colorReplace($img3,"ffffff","93A3A0");
    imagegif($img3);
    imagedestroy($img3); 
    ?>
    http://www.hotelstelladellest.it
    http://www.hotelstelladellest.com

  2. #2
    guarda che:

    header("Content-type: image/gif");

    dovrebbe essere

    header("Content-type: image/png");

  3. #3
    No quello è giusto,

    comunque alla fine ho risolto. Praticamente sono riuscito a creare una png truecolor e non palette come fa la funzione base dell gd.

    Adesso nella prima parte precedente alle funzioni salvo la gif di partenza come una png truecolor, poi dopo le funzioni ricarico questa png appena salvata (ma penso si possa fare direttamente anche senza salvare) e applico la funzione di sostituzione colore, poi mi salvo la gif modificata.

    Ecco il codice finito:

    Codice PHP:
    <?
    $filename 
    'image.gif';
    list(
    $width$height) = getimagesize($filename);
    $new_width 600;
    $new_height 600;
    $image_p imagecreatetruecolor($new_width$new_height);
    $image imagecreatefromgif($filename);
    imagecopyresampled($image_p$image0000$new_width$new_height$width$height);
    imagepng($image_p"image.png"9);
    imagedestroy($image_p);


    function 
    html2rgb($input)
    {
        
    $input=($input[0]=="#")?substr($input1,6):substr($input0,6);
        return array(
        
    'r'=>hexdecsubstr($input02) ),
        
    'g'=>hexdecsubstr($input22) ),
        
    'b'=>hexdecsubstr($input42) )
        );
    }
    function 
    colorReplace($image,$oldcolor,$newcolor=false)
    {
        
    //make the colors rbg
        
    $rgbold html2rgb($oldcolor);
        
    //make the old color transparant
        
    $oldcolor imagecolorallocate($image$rgbold[r], $rgbold[g], $rgbold[b]);
        
    imagecolortransparent($image$oldcolor);
        if(
    $newcolor)
        {
            
    $rgbnew html2rgb($newcolor);
            
    //make a new image in the new color
            
    $newimage imagecreatetruecolor(imagesx($image), imagesy($image));
            
    //color the new image
            
    $newcolor imagecolorallocate($image,$rgbnew[r], $rgbnew[g], $rgbnew[b]);
            
    imagefill($newimage00$newcolor);

            
    //paste the old image on the new colored image
            
    imagecopymerge($newimage,$image,0,0,0,0imagesx($image), imagesy($image), 100);
            
    imagecopymerge($image,$newimage,0,0,0,0imagesx($image), imagesy($image), 100);
            
    imagedestroy($newimage);
        }
    }  
    $imgg imagecreatefrompng("image.png");
    colorReplace($imgg,"ffffff","93A3A0");
    imagegif($imgg"image.gif");
    imagedestroy($imgg); 
    ?>
    http://www.hotelstelladellest.it
    http://www.hotelstelladellest.com

  4. #4
    perchè creare una png con un header gif? Non ha senso!



    Poi con l'ultimo codice tuo iserinto non vedo dove hai messo l'header

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.