teroristd каза:
Лошо няма, нали това е целта да се намери най-доброто решение на задачата

.
А още по-хубаво ще е да се покаже
защо едното работи, а другото - не. Това ще се опитам да направя сега - с посоките за мислене и как да стигнем до извода.
- Какво се случва, когато имаме такава ситуация (html с img-таг):
(1) браузърът праща http заявка
(2) сървърът генерира html
(3) браузърът вижда, че трябва да се покаже картинка и праща втора заявка
(4) сървърът дава картинката
(5) браузърът я получава и я показва
- Имаме две действия, които трябва да се случат - да се изтрие картинката и да се покаже
- Имаме точно определена последователност - картинката първо се показва, после се изтрива (няма как да покажем изтрита картинка)
Сега вече имаме доста по-добра представа за нещата, които ще се случат - в точка 4. ще имаме първо показване и после изтриване.
Остава единствено кодът. Който е изключително прост (за нивото на хората тук):
PHP:
<?php
//този ред също е важен:
header('Content-type: image/png');
// (виж това за други формати:
// http://www.sitepoint.com/web-foundations/mime-types-complete-list/
readfile('path/to/img.png');
unlink('path/to/img.png');
Като имаш:
<img src="ime-na-gorniq-fail.php" />
Това би трябвало да е по-бързо от решението на jotunkiq, защото readfile директно чете и принтва.
От друга страна, base64() вариантът е по-лесен за използване - ако гониш производителност, пробвай и двата варианта.