Allora ragazzi ho risolto così:
- ho spostato l'header sotto prima dell'invio dell'output al browser.
- Siccome ancora non funzionava ho aggiunto ob_clean() prima dell'header
e come per magia ora tutto funziona!
Idem per il secondo script!
Non chiedetemi perchè dato che ho solo trovato un post in giro nel web che diceva di fare così in realtà devo ancora controllare a che serve la funzione ob_clean() 
Grazie comunque a tutti!!!!
Codice PHP:
<?php
// Create the image
$im = imagecreatetruecolor(400, 30);
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
// The text to draw
$text = 'Testing...';
// Replace path by your own font path
$font = './ARIALN.TTF';
// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
// Set the content-type
ob_clean();
header('Content-Type: image/png');
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);