potresti fare una cosa di questo tipo: prendi l'immagine, controlli se la larghezza è maggiore di 400, ed in caso affermativo metti come width la larghezza prefissata.

codice:
preg_match("/\[IMG\](.*?)\[\/IMG\]/i", $testo, $ris);
$temp=getimagesize($ris[1]);
if ($temp[0] > 400)
	$testo = preg_replace("/\[IMG\](.*?)\[\/IMG\]/i", "<img src=\"\\1\" width=\"400\" />", $testo); 
else
	$testo = preg_replace("/\[IMG\](.*?)\[\/IMG\]/i", "<img src=\"\\1\" />", $testo);