Студия создания и продвижения сайтов Mittelspiel - Челябинск
 
Группа Создание сайтов в Челябинске ВКонтакте Мы в Twitter Миттельшпиль - Создание сайтов в Челябинске в Facebook Миттельшпиль - Создание сайтов в Челябинске в Мой Мир Миттельшпиль - Создание сайтов в Челябинске в Живом журнале Миттельшпиль - Создание сайтов в Челябинске в Однокласниках

Создание сайтов в Челябинске. Продвижение сайта

Закажите создание сайта у каомпании Миттельшпиль
 
Студия создания сайтов Mittelspiel  
 
  Студия веб-дизайна Mittelspiel. Создание сайтов. Продвижение сайта в Челябинске.  
   
Студия веб-дизайна Mittelspiel

PHP GD перенос строки длинного текста

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

Что сразу приходит на ум, если мы хотим разбить текст на строки нужной дины:
  1. Сделать перенос строк руками.
  2. Воспользоваться <textarea> нужной ширины и атрибутом wrap.
  3. Написать небольшой скрипт на PHP, используя GD, который сам разобьет любой текст на массив слов и из этого массива составит строки нужной нам длины, т.е. автоматически расставит переносы.

Думаю первые два пункта вам не интересны, раз вы здесь! Что касается PHP скрипта, выполняющего перенос строки длинного текста при наложении на изображение, использующего графическую библиотеку GD, то ниже приведен его код со всеми комментариями.

<?php
// Прописываем заголовок PNG-изображения
header('Content-type: image/png');

// Создаем изображение
$im = imagecreatetruecolor(600, 200);

// Шрифт текста
$font = 'arial.ttf';

// Размер шрифта
$font_size = 11;

// Ширина области для вывода текста
$width_text = 500;

// Длинный многострочный текст, который нужно разбить на строки нужной нам длины 
$text = "Здесь длинный многострочный текст. Давайте просто разобьем строку на массив и при переборе массива выясним, где длина строки выходит за рамку, там и поставим перенос строки.";

// Создаем цвета, которые понадобятся
$blue = imagecolorallocate($im, 0x88, 0x88, 0xFF); // голубой
$black = imagecolorallocate($im, 0x00, 0x00, 0x00); // черный

// Заливаем изображение цветом
imagefill($im, 1, 1, $blue);

// Разбиваем наш текст на массив слов
$arr = explode(' ', $text);

// Возращенный текст с нужными переносами строк, пока пустая
$ret = "";

// Перебираем наш массив слов
foreach($arr as $word)
{
// Временная строка, добавляем в нее слово
$tmp_string = $ret.' '.$word;
// Получение параметров рамки обрамляющей текст, т.е. размер временной строки 
$textbox = imagettfbbox($font_size, 0, $font, $tmp_string);
// Если временная строка не укладывается в нужные нам границы, то делаем перенос строки, иначе добавляем еще одно слово
if($textbox[2] > $width_text)
$ret.=($ret==""?"":"\n").$word;
else
$ret.=($ret==""?"":" ").$word;
}

// Накладываем возращенный многострочный текст на изображение, отступим сверху и слева по 50px
imagettftext($im,$font_size ,0, 50, 50, $black, $font, $ret);

// Выводим изображение в окне браузера
imagepng($im);

// Освобождает память занятую изображением 
imagedestroy($im);
?>
Обратите внимание, что шрифт arial.ttf должен лежать в этой же папке что и скрипт.
Что получится при выполнении данного PHP скрипта, а вот такая простая картинка.

PHP GD перенос строки длинного текста

PHP GD перенос строки длинного текста

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


Ребята, прошу вас уважать чужой труд!
При копировании данного материала, дайте ссылку на источник, это не сложно..
У страницы «PHP GD перенос строки длинного текста» комментариев: 9
<b>Владимир</b>
Владимир
25 октября 2013
Скрипт, хорош, был бы вообще идеальный, если его сделать в виде функции!
Возьму на заметку.
<b>Андрей</b>
Андрей
25 октября 2013
Благодарю. Думаю, сделать из этого кода функцию не составит особого труда.
А мне важна была простота изложения.
<b>Рома</b>
Рома
01 ноября 2013
Жаль демки нет. За php скрипт спасибо!
<b>Андрей</b>
Андрей
01 ноября 2013
Роман, зачем тут демка!?
По окончании выполнения скрипта в окне браузера отобразиться вот такая картинка:
PHP GD перенос строки длинного текста
<b>Антон</b>
Антон
06 ноября 2013
За скрипт спасибо! Андрей, подскажите как сделать то же самое, только нужно текст отцентрировать как в ворде, чтобы был по центру? Я не силен в php(
<b>Андрей</b>
Андрей
06 ноября 2013
<b>Владимир</b>
Владимир
22 ноября 2013
А как сделать, чтобы многострочный текст с переносами выравнивался по центру картинки?
<b>Андрей</b>
Андрей
22 ноября 2013
Владимир, нужно получить размер картинки уменьшить его на нужный размер отступов и, на основе этого, задать размер блока текста. Меняйте под себя - PHP GD выравнивание многострочного текста
<a href='http://oleksandr-kovzolovich.vv.si' rel='external nofollow' title='Oleksandr Kovzolovich'><b>Oleksandr Kovzolovich</b></a>
09 августа 2016
Спасибо за скрипт. Немного дописал под себя, мне надо было еще автоматически генерировать высоту. Может кому пригодится: // Прописываем заголовок PNG-изображения header('Content-type: image/png'); // Шрифт текста $font = 'arial.ttf'; // Размер шрифта $font_size = 11; // Ширина области для вывода текста $width_text = 500; // Длинный многострочный текст, который нужно разбить на строки нужной нам длины $text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; // Разбиваем наш текст на массив слов $arr = explode(' ', $text); // Возращенный текст с нужными переносами строк, пока пустая $ret = ""; //Начальная высота изображения $height = 100; // Перебираем наш массив слов foreach($arr as $word){ // Временная строка, добавляем в нее слово $tmp_string = $ret.' '.$word; // Получение параметров рамки обрамляющей текст, т.е. размер временной строки $textbox = imagettfbbox($font_size, 0, $font, $tmp_string); // Если временная строка не укладывается в нужные нам границы, то делаем перенос строки, иначе добавляем еще одно слово if($textbox[2] --> $width_text){ $ret.=($ret==""?"":"n").$word; //при каждом переносе строки добавляем 19px к высоте картинки $height = $height + 19; } else{ $ret.=($ret==""?"":" ").$word; } } // Создаем изображение $im = imagecreatetruecolor(600, $height); // Создаем цвета, которые понадобятся $blue = imagecolorallocate($im, 0x88, 0x88, 0xFF); // голубой $black = imagecolorallocate($im, 0x00, 0x00, 0x00); // черный // Заливаем изображение цветом imagefill($im, 1, 1, $blue); // Накладываем возращенный многострочный текст на изображение, отступим сверху и слева по 50px imagettftext($im,$font_size ,0, 50, 50, $black, $font, $ret); // Выводим изображение в окне браузера imagepng($im); // Освобождает память занятую изображением imagedestroy($im);
Оставить свой комментарий

Код защиты от роботов

Меню сайта Mittelspiel - Создание сайтов в Челябинске
Популярное на сайте Mittelspiel - Создание сайтов в Челябинске
Скидка на создание сайта 10%

Свет веб дизана
Новые побеги - новая концепция современного веб дизайна  
 
 
Студия веб-дизайна Mittelspiel. Создание сайтов любой сложности. Челябинск
© Copyright 2003-2015
Веб-студия «Миттельшиль»

• Создание сайтов в Челябинске.
• Продвижение сайта

+7 951 814 55 66
+7 351 248 08 23


 
Яндекс.Метрика Рейтинг@Mail.ru Rambler's Top100