Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Перенос строк и центрирование текста при наложении на изображение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: imagettftext
Heavenanvil
Отправлено: 04 Августа, 2017 - 17:58:08
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Всем привет.

Работаю над кодом, который пишет текст на изображении.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //image_size: 537x240px
  3. header('Content-type: image/jpeg');
  4. $jpg_image = imagecreatefromjpeg('111.jpg');
  5. $white = imagecolorallocate($jpg_image, 255, 255, 255);
  6. $font_path = 'arial.ttf';
  7. $text = "Длинный текст, который не помещается в одну строку, нужно сделать переносы и центрировать его.";
  8. imagettftext($jpg_image, 16, 0, 11, 150, $white, $font_path, $text);
  9. imagejpeg($jpg_image);
  10. imagedestroy($jpg_image);
  11. ?>
Появилась проблема, которую никак не могу решить и прошу помощи у вас.
Как мне сделать перенос слов, из строки $text, чтобы он красиво размещался на изображении? Пробовал изменять по количеству символов, не получилось.
Значение строки $text будет меняться, от 1 до ~30 слов.
Размер шрифта меняться не должен.
Изображения всегда будут размером 537x240px.
Перенос нужно сделать не разделяя слова, то есть на местах пробелов.
Текст нужно каким-то образом центрировать по картинке. Как вертикально, так и горизонтально.
В идеале, если возможно, делать переносы равномерно. Например, чтобы не было такого, что в предложении из 7 слов, в верхней строке 6 слов, а в нижней 1. Должно быть хотя бы 4+3, 3+4, или 5+2. Возможно какие-то специальные символы для переноса придумать, аля <br>.

Готов подкинуть на пиво, тому кто поможет, пишите в ЛС или прям тут.
 
 Top
Строитель Модератор
Отправлено: 04 Августа, 2017 - 21:28:26
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Heavenanvil, вроде бы так:
Спойлер (Отобразить)
 
 Top
Heavenanvil
Отправлено: 05 Августа, 2017 - 05:22:12
Post Id


Частый гость


Покинул форум
Сообщений всего: 183
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Строитель, всё работает превосходно.
Одна только проблема есть: вертикально этот бокс центрируется всегда на одном уровне, приблизительно по центру, но если строк будет 4 или 5, текст спозлает вниз, ниже картинки, хотя первая строка останется по центру..
Можно бокс как-то тоже вертикально центрировать в зависимости от его высоты?

Разобрался.
PHP:
скопировать код в буфер обмена
  1. $y = ((imagesy($image) - ($box[1] - $box[6]))/2);


Спасибо ещё раз. Если что, пишите в ЛС

(Отредактировано автором: 05 Августа, 2017 - 05:34:57)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB