Nelle prime righe inizializzi gli array $valore1 e $valore2, mentre in seguito leggi da $valore.

Dal tuo codice non si capisce se le variabili $valore ($valore1 e $valore2) siano numeriche (usate per scegliere i colori) oppure la stringa da inserire nella immagine.

Puoi provare a sostituire $valore1=... con $valore[1]=.... ed analogamente $valore2 con $valore[2].


Secondariamente, non puoi inviare più di un header nè più di un imagejpeg($im); in una unica pagina.
Dovrai spostare l'header fuori dal loop ed inviare in output solo una delle immagini (es: passthru("img1.png"); ).


Ci sono poi alcune cose inutili/sbagliate.

Ad esempio la istruzione $background = imagecolorallocate($im, $r, $g, $b); non serve a nulla se poi il colore definito in $background non lo usi in nessun modo.

Poi manca qualsiasi controllo di validità di $file1, $file2 ed $im.