probabilmente succede perchè l'immagine generata dalla funzione imagecreate() non produce immagini di tipo true color, che la funzione imagecolorallocate() si aspetta di ricevere in ingresso, come specificato dalla documentazione ufficiale.

per risolvere, usa la funzione imagecreatetruecolor() al posto di imagecreate()