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); 
?>