En principio .. con las librerias GD tienes dos familias de funciones para trabajar imagenes (las finales que obtengas al crearlas) en 256 colores de profundidad de color o "True Color" (+16M colores ..)
Las funciones que estás usando en el código de ejemplo que pusistes no van a alcanzar más de 256 colores pese que tus imagenes de origen sean de mayor profundidad de color.
Si requieres generar imagenes de +16 Millones de colores necesitas usar las librerias versión 2.x de las GD y usar las funciones de la familiar "truecolor" .. Por ejemplo en lugar de ImageCreate() usar imagecreatetruecolor()
A su vez algunos formatos de salida como el JPG que empleas disponen de parámetros para ajustar el ratio de compresión que vas a usar al generar tus imagenes (ratio calidad vs peso del archivo). Concretamente de imagejpg() es el 3er parámetro el que hace dicho ajuste (por defecto creo que sale al 70% o algo así).
Para cualquier aclaración acude al manual oficial de PHP y revisa dichas funciones:
www.php.net/gd
Un saludo,