personalmente apporterei due modifiche (ma non ho guardato la cosa in dettaglio):
$img_dst=imagecreate($g_iw,$g_ih);
diventa
$img_dst=imagecreatetruecolor($g_iw,$g_ih);
e
$g_imgcomp=100-$imgcomp;
diventa
$g_imgcomp=$imgcomp;
La prima modifica in teoria ti da una qualità migliore e la secondo è per semplice logica, per un immagine JPG qualità 80 è alto e 20 basso, com'è impostato attualmente si ha tendenza a chiamare la funzione specificando $imgcomp con questo criterio penso e se dunque passi 80 l'immagine che ottieni è compressione 20 => "uno schifo"