Запись текста в изображение

1.84K
.
Wap Master

Пока окончательный вариант таков

<?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) .'">';
.
Wap Master

ДоХтор, Спасибо, то что хотел!

.
# Macabre (30.10.2016 / 20:03)
ДоХтор, Спасибо, то что хотел!
Я код тестировал в IDE, и её браузер выводил картинку без проблем, а когда открыл этот же файл в Фаерфоксе, то так же как и у тебя, вылезли кракозяблы ... В общем, по не внимательности, и по не опытности, я не обратил внимание на неправильную последовательность буферизации. Исправил - и код отработал как требовалось.
.

ob_* используйте.
Захватывайте в буфер вывод картинки, из буфера в строку, строку в тело страницы

.
ob_start();
        Imagepng($img);
        $content = ob_get_contents();
        ob_clean();
        ImageDestroy($img);
        return base64_encode($content);
.
Wap Master

Еще небольшой вопросик. При экспорте ссылки на страницу, где я использую этот код, в соцсети, например вк, контакт не видит изображения, то есть обычно если на странице есть картинки, то вк выводит превью одной из них, а тут пустота.

.

потому что это не файл

.
Wap Master

И так, всем спасибо кто подсказывал. На сегодня все, в планах: добавить подсчет символов и исходя из их количества менять высоту картинки, а то если сделать высокую, а текста а то большая часть картинки пустая, а если сделать узкую то на ней не поместится длинный текст.

Всего: 69