La imagen con nombre aleatorio se explica en esta línea:
Código PHP:
$nom = substr(md5(uniqid(rand())),0,6);
¿La imagen queda bien subida? ¿Es jpeg?...
Si quedó negra la imagen con nombre aleatorio es porque no se ha copiado nada dentro de ella. Dejame que voy a probarlo y compararlo con un código que tengo yo y en un rato te digo si encuentro algo.
Otra coas, podés usar
imagecopyresampled() te va a quedar mucho mejor porque esta funcion suaviza la imagen al cambiarle el tamaño.
Saludos.