
Картинка в виде текста на блокноте

Картинка в виде текста на блокноте
Нарисовал тут PHP-скрипт для создания стильных изображений с текстом в блокноте, который автоматически превращает обычный текст в изображения, стилизованные под рукописные записи в блокноте. Один-два изображения еще можно сделать руками в какой-нибудь фотожопе. Но вдруг потребуются картинки сразу и много, скрипт решает эту проблему.
Раздельные изображения можно делать самому, или скопировать кусками его из целой картинки. Автоматически настраивается верхняя часть, центральная часть (одна строка), нижняя часть. Центральная часть повторяется столько раз, сколько нужно строк текста. Шрифты лучше смотрится как будто написаны рукой.
Code (PHP) : Убрать нумерацию
- <?
- /**
- * Основные настройки
- */
- // Файл фонового изображения блокнота
- $notebook_file = 'notebook.jpg';
- // Текст для вставки
- $text='Технический текст - это информационно насыщенное,'.
- ' структурированное и точное изложение знаний,'.
- ' предназначенное для передачи сведений о принципах'.
- ' работы, составе, функциях или правилах использования'.
- ' объектов технической, инженерной или научной'.
- ' направленности.';
- // Блокнот
- $nb_top = 54; // Верхнее поле
- $nb_bottom = 56; // Нижнее поле
- $nb_center = 62; // Расстояние между строками
- // Путь к файлу шрифта
- $nb_font = __DIR__.'/notebook.otf';
- // Настройки шрифта
- $nb_size = 40; // Размер шрифта
- $nb_text_left = 150; // Отступ слева
- $nb_text_top = 62; // Отступ сверху для первой строки
- $nb_text_right = 60; // Отступ справа
- $nb_text_size = 25; // Отступ текста
- $notebook = imagecreatefromjpeg($notebook_file);
- $notebook_width = imagesx($notebook);
- $notebook_height = imagesy($notebook);
- $tmp_box = imagettfbbox($nb_size, 0, $nb_font, 'test');
- $nb_text=abs($tmp_box[5]);
- /**
- * Функция для переноса строк с поддержкой UTF-8
- */
- function utf8_wordwrap($string, $width=25, $break="\n", $cut=false) {
- if($cut) {
- $search = '/(.{1,'.$width.'})(?:\s|$)|(.{'.$width.'})/uS';
- $replace = '$1$2'.$break;
- }
- else {
- $search = '/(?=\s)(.{1,'.$width.'})(?:\s|$)/uS';
- $replace = '$1'.$break;
- }
- $tdd=preg_replace($search, $replace, $string);
- // echo $tdd.' ';
- return $tdd;
- }
- // Подбираем оптимальную длину строки
- $wrap = mb_strlen($text, 'UTF-8');
- while(true) {
- $tmp_wrap = utf8_wordwrap($text, $wrap, "\n", true);
- $tmp_box = imagettfbbox($nb_size, 0, $nb_font, $tmp_wrap);
- // Проверяем, помещается ли текст по ширине
- if (($tmp_box[2] - $tmp_box[0]) <
- ($notebook_width - $nb_text_left - $nb_text_right)) {
- break;
- }
- $wrap--;
- if ($wrap == 0) {
- $tmp_wrap = utf8_wordwrap($text,
- mb_strlen($text, 'UTF-8'), "\n", true);
- $tmp_box = imagettfbbox($nb_size, 0,
- $nb_font, $tmp_wrap);
- break;
- }
- }
- // Рассчитываем необходимую высоту изображения
- // Количество строк
- $line_count = count(explode("\n", $tmp_wrap));
- $line_width=($line_count-1)*(abs($nb_text)+$nb_text_size);
- $line_width=ceil($line_width/$nb_center)*$nb_center;
- $height=$nb_top+$nb_bottom+ceil($line_width/$nb_center)*$nb_center;
- $width=$notebook_width;
- $im=imagecreatetruecolor($width, $height);
- // Собираем изображение блокнота
- ImageCopy($im, $notebook, 0, $pos, 0, 0, $width, $nb_top);
- $pos+=$nb_top;
- for ($i=0; $i<($line_width/$nb_center); $i++) {
- ImageCopy($im, $notebook, 0, $pos, 0, $nb_bottom,
- $width, $nb_center);
- $pos+=$nb_center;
- }
- ImageCopy($im, $notebook, 0, $pos, 0,
- ($notebook_height-$nb_bottom), $width, $nb_bottom);
- $pos+=$nb_bottom;
- // Черный цвет для текста
- $black = ImageColorAllocate($im, 0, 0, 0);
- $top=$nb_text_top+$nb_text;
- $tmp=explode("\n", $tmp_wrap);
- for ($i=0; $i<$line_count; $i++) {
- // Добавляем текст
- Imagettftext($im, $nb_size, 0, $nb_text_left, $top,
- $black, $nb_font, $tmp[$i]);
- $top+=($nb_text+$nb_text_size);
- }
- // Выводим изображение
- header('Content-type: image/jpeg');
- // 100% качество
- imagejpeg($im, NULL, 100);
- // Освобождаем память
- imagedestroy($im);

Пример картинки

Пример картинки

Пример картинки
Такой подход позволяет создавать блокноты любой высоты с сохранением пропорций и качества изображения. Запустите скрипт, он создаст изображение с нужным текстом. Вот примеры разных шрифтов и размеров.
Просмотров: 577 | Комментариев: 3
Добавить комментарий
Заполните форму для добавления комментария
Шрифт и файл "блокнота"

