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
Форумы портала PHP.SU :: Версия для печати :: динамическое формирование изображения
Форумы портала PHP.SU » » Графика в PHP » динамическое формирование изображения

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

1. NWH - 27 Мая, 2012 - 01:53:17 - перейти к сообщению
Hi All!

Задача:

Необходимо реализовать сервис формbрования динамических картинок с помощью php.

Например по запросу http://mysite[dot]ru/image.php?text=mytext будет сформирована картинка с текстом mytext. Проблем нет.

Проблема появляется тогда, когда пользователю отдается страница, на которой много (10-20) таких вот динамических картинок с разным текстом. Некоторые картинки не грузятся. Но если их запросить повторно или отдельно, то они загрузятся.

Когда систему тестирую на локалхосте, то все грузится, а вот если через инет (мой комп имеет белый, статический ip) зайти на данную страницу, то некоторые картинки не грузятся...Ну может быть кто-то скажет инет у тебя медленный...

Для примера приведу похожий сервис http://www[dot]forkosh[dot]com/mimetex[dot]html
Там то же самое. Скрипту передается какой-то текст и на основании этого текста формируется картинка.

Я данный сервис тестировал таким же методом: делал страницу с сотней динамических картинок - и все грузились! И данный сервис обслуживает огромное число запросов! И все работает (у них)!

Такое ощущение, что браузеру надо сказать:"потерпи малек, щас все картинки придут" Радость

Подведем итог. Как-то проблему решить можно. Но не понятно в каком направлении копать.

В догонку. Делал эксперимент. Скрипт формирует кучу статических изображений, сохраняет их на диск, формирует страницу с ссылками на статические картинки и отдает страницу клиенту. Все работает! Все картинки (100 шт) грузятся! Даже на медленном gprs соединении. Ждешь пока загрузятся и готово, и главное все на месте, ни одна не пропала!

PS
В инет комп выходит через роутер со службой Virtual Server, а сам WEB-сервер крутится на виртуальной машине с сетевым мостом.
2. kat69 - 28 Мая, 2012 - 20:45:28 - перейти к сообщению
Как вариант, уменьшит нагрузку на сервер

CODE (php):
скопировать код в буфер обмена
  1. $uploadDir = "img";  //папка хранения сформированных изображений
  2. $uploadDir = $_SERVER['DOCUMENT_ROOT'] . "/" . $uploadDir . "/";
  3. //проверяем или был такой запрос раньше
  4. if (is_file($uploadDir . md5($_REQUEST['text']) . ".png")) {
  5.     header('Content-Type: image/png');
  6.     echo  file_get_contents($uploadDir . md5($_REQUEST['text']) . ".png");
  7. } else {
  8.     //если нет, делаем новое.
  9.     $im = @imagecreatetruecolor(120, 20)
  10.         or die('Невозможно инициализировать GD поток');
  11.     $text_color = imagecolorallocate($im, 233, 14, 91);
  12.     imagestring($im, 1, 5, 5, $_REQUEST['text'], $text_color);
  13.     // Выводим в браузер
  14.     header('Content-Type: image/png');
  15.     imagepng($im);
  16.     //Cохраням в папку
  17.     imagepng($im,$uploadDir . md5($_REQUEST['text']) . ".png");
  18.     imagedestroy($im);
  19. }
3. NWH - 29 Мая, 2012 - 20:38:53 - перейти к сообщению
kat69 пишет:
Как вариант, уменьшит нагрузку на сервер


В принципе это и понятно. Но я говорю о случае, когда клиенту отдали страницу с большим количеством динамических картинок и браузер клиента эти картинки начинает просить у сервера. А их же еще надо и сформировать. Тут как ни крути все равно получается "импульсная нагрузка" на сервер.

Мне хочется понять, почему статические картинки сервер отдает без проблем (возможно потому, что здесь не участвует интерпретатор PHP Хм ), а с отдачей динамических картинок есть затруднения... Есть еще подозрения, что большая цепочка всяких роутеров, "обратных проксей" и прочих устройств коммутации запросов как-то ухудшает ситуацию (при большем числе всяких коммутаторов - формируется меньшее количество динамических картинок). Но на отдачу статических картинок это никак не влияет... Растерялся

Вот и хочется разобраться.
4. Medallion - 29 Мая, 2012 - 20:56:30 - перейти к сообщению
Я если сформировать одно большое php-изображение, состоящее из маленьких с текстом и синхронно сгенерировать css-файл в котором будет позиционирование на эти все элементы. Загрузиться то одно изображение, в котором и можно выбирать потом нужные элементы с помощью CSS.
Реализация сложна, или выполнима ли она я незнаю.
Вообщем, я подал идею Закатив глазки
5. DlTA - 29 Мая, 2012 - 21:15:54 - перейти к сообщению
генерация изображений на php это таки долгий процесс, а если этих изображений еще и много то прямо пропорционально.
подгрузка большого числа таких изображений дело долгое и не каждый браузер столько ждет (в частности ie)

генерация одного большого изображения вместо множества маленьких сильно не спасет, + можно нарваться на лимит по памяти, что чаще всего и происходит.

выход делать кеширование.
6. kat69 - 30 Мая, 2012 - 14:43:04 - перейти к сообщению
Если нет возможности увеличить мощность сервера, смотрите в сторону AJAX и динамически подгружайте картинки.
7. Serge78rus - 15 Апреля, 2014 - 12:21:59 - перейти к сообщению
Если Вам, как Вы пишете, необходимо поменять только текст на картинке, то может быть стоит посмотреть в сторону SVG?. Как динамически менять атрибуты элементов SVG можно посмотреть в статье Как оживить SVG

 

Powered by ExBB FM 1.0 RC1