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