Si el código funciona .. suponemos que usas GD versión 2.x en adealnte . .eso hace posible que puedas usar las funciones tipo imagecreatetruecolor() .. lo que te faltó es cambiar:
imagecopyresized() por imagecopyresampled() que es la función "true color" para GD 2.x y así aprovechar la paleta de colores de 256 colores por canal (RGB).
Un ejemplo completo de ese tipo de script lo tienes en este mini-tutorial:
http://www.forosdelweb.com/f18/tutorial-ejemplo-subir-archivos-bd-guardando-bd-binario-127775/
(fijate en los comentarios al pié del mismo sobre esas funciones y GD según versión).
Un saludo,