Вам придется разделить его:
Render(...)
напишет временный файл (со случайным именем), который будет доступен из Интернета в течение некоторого времени.
Новый метод Output()
вернет случайное имя, упомянутое выше.
Затем вы вызываете Render()
перед выводом HTML и встраиваете URL, используя Output()
.
В качестве альтернативы вы можете использовать какой-то файл или базу данных для обмена параметрами, по сути, какой-нибудь метод Prepare(...)
? запись параметров в файл или базу данных и Render()
чтение этих параметров и размещение файла снова и т. д.
В качестве еще одной альтернативы (без записи в файловую систему): вы можете реализовать включение данных изображения, используя data:
uri, но размер изображения будет ограничен в зависимости от используемого браузера, и вы не сможете кэшировать данные таким образом (то есть вы должны отправить его все время).
В зависимости от того, чего вы пытаетесь достичь, вам может повезти, встраивая SVG-изображение. Это дало бы огромное преимущество - быть на месте, при этом используя меньше полосы пропускания, быть масштабируемым и т. Д. Недостатком является то, что это поддерживается только в новейших браузерах (аналогично data:
), но ограничений по размеру нет.
Редактировать: Используя base64 / внедренный подход, он становится немного сложнее, что приводит к чему-то вроде этого (не проверено, но должно работать):
ob_start(); // buffers future output
imagepng($img); // writes to output/buffer
$b64 = base64_encode(ob_get_contents()); // returns output
ob_end_clean(); // clears buffered output