Генерация изображения из текста PHP

Комментариев: 1

Появилась довольно нестандартная задача, необходимо было все упоминания ФИО человека на сайте сделать неиндексируемыми. Прошерстив интернет, понял, что единственно 100% рабочий способ - это изображение. Ну и собственно проблема была решена с помощью штатных средств PHP.

//Функция генерации изображения из текста

function getImageFromText($text, $size_font = 12, $font_height, $font_width) {
	//header('Content-Type: image/png');
	//Рассчитываем количество символов в строке
	$count_sumbols = iconv_strlen($text);
	//Определяем размеры изображения, которое необходимо создать
	$img_width = $count_sumbols * $font_width;
	$img_height = $font_height;
	//Создаём изображение
	$im = imagecreatetruecolor($img_width, $img_height);
	//Задаём цвета в RGB
	$white = imagecolorallocate($im, 255, 255, 255); //Фон
	$blue = imagecolorallocate($im, 7, 41, 77); //Текст
	imagefilledrectangle($im, 0, 0, $img_width, $img_height, $white);
	//Шрифт который используется на сайте (загрузите предварительно)
	$font = '/fonts/Roboto-Bold.ttf';
	//Наносим текст на изображение
	imagettftext($im, $size_font, 0, 0, 20, $blue, $font, $text);
	ob_start();
	imagepng($im);
	//Помещаем содержимое буфера (изображение) в переменную
	$output = ob_get_contents();
	//Очищаем содержимое буфера
	ob_end_clean();
	//Выводим изображение
    echo '<img src="data: image/png;base64,'.base64_encode($output).'" />';
}

Я немного поленился, и не стал передавать в функцию цвет шрифта и цвет фона изображения и вписал его жестко, но вы можете без труда доработать под себя.

<?php getImageFromText('Это не текст, это картинка', 12, 25, 9); ?>
  • $text - текст для кодирования в изображение
  • $size_font - размер шрифта в пунктах
  • $font_height - высота заглавной буквы (я предварительно линейкой замерил высоту буквы в своём шрифте на сайте)
  • $font_width - также, линейкой замерил ширину буквы.

Замерять размеры букв нужно для того, что бы корректно сформировался размер изображения.

Уведомлять о новых комментариях
Уведомлять
guest
1 Комментарий
Inline Feedbacks
View all comments
Тёма
Тёма
2 лет назад

Спасибо!