Nije to samo zbog echo, nego zbog i zbog onog silnog html-a ispred header(), ustvari pre headera ne smes da imas nikakav output (cak ni prazan red).
Ovo sto ti hoces ustvari nema veze sa output bufferingom, nego:
// kada ovo stavim da bude poseban file (uz povezivanje sa bazom ne koristeci include), slika se pokazuje sasvim normalno
Pa to i treba da bude poseban file, bas kao sto je html strana jedan, a slika poseban file.
Da bi prikazao sliku u okviru HTML-a moras da imas <img> tag, u ovom slucaju stavi <img> i da je src te slike ovaj tvoj php script koji prikazuje sliku. Znaci moras da imas dva fajla:
u jedan file stavi ceo onaj PHP/HTML (bez dela za sliku naravno), i stavi u njega <img src="script.php">
a script.php je poseban fajl koji sadrzi samo kod za prikaz slike