To do what you want, you'll need to manage the text positioning by hand -- \n won't help you.
A font's color is determined by a parameter you pass to imagettftext. You create the color via a call to imagecolorallocate.
Font weight and style (like bold and italic) are handled by the font itself. In other words, if you want Arial drawn in bold, you'll need to load a font called "Arial Bold". You can "fake" bold text to a degree by redrawing the same text 1 or 2 pixels down and to the right, but there's no programmatic way to synthesize italic text -- you'll need to have an actual italic version of the font which you can load.
To decide where to draw each line (or part of a line) of text, you need to do some math (the more fonts and weights and italics on a given line, the more math you'll need to do). The function imagettfbbox gives you the bounding rectangle for a given string of text in a given font.