Пока окончательный вариант таков
<?php
define('_IN_JOHNCMS', 1);
$headmod = 'Тест';
$textl = 'Тест';
require_once ('../incfiles/core.php');
require_once ('../incfiles/head.php');
function generateImage($text) {
$text = wordwrap($text, 10, "\n");
// размер изображения
$img = imagecreatetruecolor(500, 300);
// цвет фона
$bg = imagecolorallocate($img, 0, 0, 0);
imagefilledrectangle($img, 0, 0, 150, 150, $bg);
// шрифт
$font = 'ttf.ttf';
// цвет текста
$black = imagecolorallocate($img, 255, 0, 0);
// вычисляем сколько места займёт текст
$bbox = imageftbbox(20, 0, $font, $text);
// вычисляем координаты для центрирования
$x = (imagesx($img) - $bbox[4])/2;
$y = (imagesy($img) - $bbox[5])/4;
// добавляем текст на изображение
imagefttext($img, 20, 0, $x, $y, $black, $font, $text);
// выводим изображение
$png = 'data:image/png;base64,'. base64_encode(imagepng($img));
// освобождаем память
imagedestroy($img);
return $png;
}
$string = 'Проверка, тест, проверка, тест';
echo '<img src="'. generateImage($string) .'">';
require_once ('../incfiles/end.php');
?>
Macabre, нашёл я причину. Вот так должно работать
* (+/-)
<?php
function generateImage($text) {
$text = wordwrap($text, 10, "\n");
// размер изображения
$img = imagecreatetruecolor(500, 300);
// цвет фона
$bg = imagecolorallocate($img, 0, 0, 0);
imagefilledrectangle($img, 0, 0, 150, 150, $bg);
// шрифт
$font = 'fonts/verdana.ttf';
// цвет текста
$black = imagecolorallocate($img, 255, 0, 0);
// вычисляем сколько места займёт текст
$bbox = imageftbbox(20, 0, $font, $text);
// вычисляем координаты для центрирования
$x = (imagesx($img) - $bbox[4])/2;
$y = (imagesy($img) - $bbox[5])/4;
// добавляем текст на изображение
imagefttext($img, 20, 0, $x, $y, $black, $font, $text);
// выводим изображение
ob_start();
imagepng($img);
$png = 'data:image/png;base64,'. base64_encode(ob_get_contents());
ob_end_clean();
// освобождаем память
imagedestroy($img);
return $png;
}
$string = 'Проверка, тест, проверка, тест';
echo '<img src="'. generateImage($string) .'">';
ДоХтор, Спасибо, то что хотел!
# Macabre (30.10.2016 / 20:03)
ДоХтор, Спасибо, то что хотел!
Я код тестировал в IDE, и её браузер выводил картинку без проблем, а когда открыл этот же файл в Фаерфоксе, то так же как и у тебя, вылезли кракозяблы ... В общем, по не внимательности, и по не опытности, я не обратил внимание на неправильную последовательность буферизации. Исправил - и код отработал как требовалось.
ob_* используйте.
Захватывайте в буфер вывод картинки, из буфера в строку, строку в тело страницы
ob_start();
Imagepng($img);
$content = ob_get_contents();
ob_clean();
ImageDestroy($img);
return base64_encode($content);
Еще небольшой вопросик. При экспорте ссылки на страницу, где я использую этот код, в соцсети, например вк, контакт не видит изображения, то есть обычно если на странице есть картинки, то вк выводит превью одной из них, а тут пустота.
И так, всем спасибо кто подсказывал. На сегодня все, в планах: добавить подсчет символов и исходя из их количества менять высоту картинки, а то если сделать высокую, а текста а то большая часть картинки пустая, а если сделать узкую то на ней не поместится длинный текст.