Методические указания к лабораторным работам для студентов iii курса автф
Скачать 1.96 Mb.
|
ЛАБОРАТОРНАЯ РАБОТА № 5Работа с графикой в PHP. Построение диаграмм. Цель работы Изучить функции работы с изображениями, освоить построение диаграмм средствами языка сценариев PHP. Краткие теоретические сведения При разработке web-сайтов часто возникает необходимость формировать изображения «на лету» - отображение результатов голосования, динамики запросов, статистики посещений. В PHP нет ограничений на формат вывода. Он может также использоваться для создания изображений и манипуляций с файлами изображений различных форматов, включая gif, png, jpg, wbmp и xpm. Что особенно удобно: PHP может выводить поток изображения непосредственно в браузер. Однако, смешивать форматы вывода невозможно, поскольку формат задается в заголовке ответа HTTP: header ("Content-type: image/png"); Для отображения динамически сформированного изображения в тексте применяется известный тег HTML: Само же формирование изображения начинается вызовом функции $im=@imagecreate($size_x, $size_y) or die ("Cant Initialize GD"); аргументы которой – размер создаваемого изображения в пикселях. Функция возвращает ссылку на созданное пустое изображение, а в случае неудачи создания работа сценария прерывается. Символ @ служит для подавления выдачи стандартного сообщения об ошибке в браузер. Далее необходимо определить цвета, используемые в изображении: $magenta_color=imagecolorallocate ($im,255,0,255); $line=imagecolorallocate ($im, 64, 16, 0); $transparent_color=imagecolortransparent($im,$magenta_color); Вызов последней функции обеспечивает прозрачность цвета для его использования в качестве фонового. В созданном изображении выделенными цветами рисуются графические примитивы – линии, сектора, прямоугольники, эллипсы. int imageline (im, int x1, int y1, int x2, int y2, int col); int imagearc (im, int cx, int cy, int w, int h, int s, int e, int col, int style); int imagerectangle (im, int x1, int y1, int x2, int y2, int col); int imageellipse (im, int cx, int cy, int w, int h, int col); Замкнутые фигуры, в том числе все изображение, могутиметь заливку: int imagefilledrectangle (im, int x1, int y1, int x2, int y2, int col); bool imagefill (im, int $x , int $y , int $col); В изображении может присутствовать текст: bool imagestring (im, int $font, int $x, int $y, string $string, int $color); array imagettftext (im, float $size, float $angle, int $x, int $y, int $color, string $fontfile, string $text); Шрифт текста может быть встроенным (для функции imagestring() 1-5 в зависимости от размера), типа TrueType (для функции imagettftext()) или предварительно загруженным специальным типа gdf, сконвертированном из TrueType: int imageloadfont ( string $file) Может возникнуть проблема с выводом текста на русском языке – встроенные шрифты (для функции imagestring()) не поддерживают кириллицу, и даже при указании шрифта функции imagettftext() кириллица может выводиться в неверной кодировке. Есть несколько способов решения этой проблемы. Самый простой – задать кодировку явно: setlocale(LC_ALL,"ru_RU.WIN1251"); или конвертировать строку с символами кириллицы в кодировку UTF-8: $text = iconv("windows-1251", "UTF-8", "наш текст"); Осталось вывести полученное изображение в нужном графическом формате в браузер или файл: imagepng ($im[, string $filename ]); Пример динамически изменяющейся диаграммы, формируемой по записям из базы данных, см. здесь: http://gun.cs.nstu.ru/web/labs/lab5/ Методические указания Для разработки сценариев применяйте любые доступные текстовые редакторы, например, Jview или Notepad++. Сценарии располагаются на сервере с адресом 217.71.139.72, подключение к которому производится по протоколу FTP с именем учетной записи userNM, где N – порядковый номер группы, M - номер студента по журналу, пароль сообщается преподавателем. Лабораторная работа выполняется в отдельной папке на сервере, куда копируются сценарии лабораторной работы №3 для модификации. При настройке клиента FTP необходимо установить пассивный режим. При разработке страниц периодически сохраняйте их и проверяйте их отображение в любом из доступных браузеров. При написании сценариев обращайте внимание на кодировку русского текста, правильность написания HTML-тегов, имен переменных и функций PHP, парность открывающих и закрывающих кавычек в операторе echo. При отладке сценариев обновляйте содержимое окна браузера при нажатой клавише Shift. Для запрета кэширования web-страниц на локальном диске формируйте в сценариях заголовок header(expires='-1d'). По окончании лабораторной работы запишите документы сайта на сменный носитель для сохранения и распечатки. Порядок выполнения работы Модифицировать файл index.php сценария извлечения записей из базы данных для отображения результатов работы сценария, формирующего диаграмму. Сделать копию файла index.php с другим именем, ссылка на который помещена в файл index.php, модифицировать запрос извлечения записей из базы данных для их группирования, сформировать массивы данных и подписей к ним. Реализовать в этом же файле построение гистограммы с подписями под столбцами и выводом значений столбцов над ними. Если подписи к столбцам данных хранятся в базе данных на русском языке, организовать загрузку файла подходящего шрифта. Изображения осей абсцисс и ординат и их подписи не обязательны. Отладить сценарии, убедиться в динамическом перестроении гистограммы при изменении записей в базе данных, продемонстрировать их работоспособность преподавателю. Сохранить на локальной машине и распечатать файлы отлаженных сценариев. Варианты заданий Задания различаются структурой базы данных, реализованной в соответствии с заданиями к лабораторной работе №1, и являются модификацией лабораторной работы №3. Содержание отчета Цель работы. Вариант задания. SQL-запрос на извлечение и группирование отображаемых в диаграмме данных. Листинги сценариев. Выводы по работе. Контрольные вопросы Как переключить PHP на вывод графических данных? Как создать новое пустое изображение, изображение из существующего файла? Как выделить цвета для изображения, какими они могут быть? Какие графические примитивы могут быть помещены в изображение? Какие имеются функции для формирования надписей, в чем их различие? Как решить проблему отображения надписей на русском языке? Как отобразить/сохранить полученное изображение? Как определить реальный тип изображения, созданного из файла? Какие существуют функции для обработки изображения, созданного из файла? Какие существуют функции для получения свойств изображений? |