Utilise la fonction getimagesize. Losque tu parse, tu récupère l'url de l'image avec [php]preg_match("`\[img=(.*?)\](.*?)\[\/img\]`si", $message_txt, $match);[/php]
dans la variable $message_txt tu y met le poste non parsé.
Dans $match tu récupère un tableau contenant à l'index 1 l'url de l'image
[php]$url_image = $match[1];[/php]
(pour info à l'indexe 2 tu as le texte sur l'image)
Ensuite pour avoir la taille de l'image tu fais par exemple :[php]list($width, $height) = @getimagesize($url_image);[/php]
et ensuite tu appliques la hauteur et la largeur à la balise <td> de ton table où tu affiche l'image.
Edit : Dans l'exemple d'utilisation de getimagesize les variables $width et $height contienent après la largeur et la hauteur.
Ceci devrait te permettre d'avoir les dimensions de l'image à afficher en revanche il y a un inconveniant, c'est que le message ne pourra comporter qu'une image avec texte, puisque preg_match s'arrete dès qu'une occurence satisfait le masque. Il y a bien preg_match_all qui récupère toutes les occurences mais le problème après et au moment du parse car quand tu va faire preg_replace, tu sais pas quelle occurrence tu traite (je sais pas si je suis clair)