Q:

Создать и вывести картинку - Base64 - PHP

Доброго времени.  Создаю и вывожу я картинку с телефоном так: 
header("Content-Type: image/png");
$im = @imagecreate(150, 20)or die("Невозможно создать поток изображения");
$background_color = imagecolorallocate($im, 0, 0, 0);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 4, 2, 2,  "+7 111 111 11 11", $text_color);
imagepng($im);
imagedestroy($im);

далее, мне нужно сразу ее вывести, но только в base64.  Подскажите логику моих дальнейших действий, а то не соображу: нужно копировать на хост ее и потом выводить или можно без копирования, сразу ее вывести, чтобы место не занимала ? 
Вывожу другие картинки на хосте так :
$file = "../../../../../demo/8.x/test.png";
if($fp = fopen($file,"rb", 0))
{
   $picture = fread($fp,filesize($file));
   fclose($fp);
   $base64 = chunk_split(base64_encode($picture));
   $tag = '<img src="data:image/gif;base64,'.$base64.'" / >';
    echo $tag;
} 

пример : авито 

A:

Главное: генерировать картинку с номером телефона на лету - очень плохая мысль.  Это тяжёлая операция и ваша железка загнётся уже на какой-то совершенно смешной нагрузке. 
Создавайте картинку сразу при создании объявления и кладите её с каким-нибудь именем, не содержащем в себе исходный номер телефона.  В сущности, md5 от телефона с какой-нибудь глобальной для проекта строкой уже будет достаточно.  Прячетесь ведь только от глупых парсеров, которые не будут разбирать написанное на картинке, а написано-то без всяких искажений, контрастно.  Соответственно, вставлять картинку инлайном в base64 или обычным src - уже не имеет особой разницы. 
Либо, как другой вариант, генерировать картинку при первом обращении к ней и сохранять куда-нибудь в кеш. 
Если работать с диском стало тесно (например, хотите кэш картинок в memcached засунуть), а tempnam использовать не спортивно (и, тем более, по какой-то причине хотите куцый GD2, а не imagemagick), то встаёт вопрос, как получить бинарник сгенерированной картинки в строку.  GD штатных средств для этого не даёт, но можно обойтись буферизацией вывода:
$im = @imagecreate(150, 20)or die("Невозможно создать поток изображения");
$background_color = imagecolorallocate($im, 0, 0, 0);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 4, 2, 2,  "+7 111 111 11 11", $text_color);
ob_start();
imagepng($im);
$img = ob_get_clean();
imagedestroy($im);
// в $img теперь лежит сгенерированный бинарник

