Секция 7 - MATLAB в образовании и Интернете (1250002), страница 10
Текст из файла (страница 10)
Вычисливимя файла, функция getGS проверяет его наличие на жестком диске компьютера. Если файл найден, полю isexist возвращаемой структуры присваивается значение 1. Анализируя значение gs.isexist, расчетная функциядолжна либо произвести новый расчет, либо использовать имеющийсяграфический файл gs.filename. В нашем примере с построением диаграммы направленности функцией radiation достаточно поместить часть тек1868Секция 7. MATLAB в образовании и Интернетеста, выделенного строками, состоящими из знаков равенства, внутрь условия if:gs = getGS( ins );if( gs.isexist )% ===================================================...% ===================================================end; % end of if( gs.isexist )При вычислении имени графического файла функция getGS помимообязательных параметров задачи, проверяет также наличие во входнойструктуре параметров ins.format и ins.quality, которые определяют выборграфического формата и качества растрового изображения.
В настоящеевремя параметр ins.format может иметь значения ‘gif’ (или 1), ‘mpeg’ (или‘mpg’, или 2), ‘jpeg’ (или ‘jpg’, или 3) и ‘png’ (или 4). Параметр ins.qualityможет иметь значения 1, 2 или 3. Меньшее значение ins.quality соответствует меньшему размеру графического файла, большее значение ins.qualityсоответствует улучшению качества изображения. Если параметр качестваins.quality не задан, выбирается оптимальное соотношение качества и размера, т.
е. значение 2. Если не задан формат изображения, т. е. поле formatотсутствует во входной структуре ins, предполагается, что следует выбратьформат jpeg. Значения формата и качества, используемые по умолчанию,можно также указать соответственно во втором и в третьем аргументахфункции getGS. Например, чтобы в приложениях, которые генерируют видеоклипы, по умолчанию использовался формат mpeg с максимальнымсжатием файла, следует выбрать следующий способ вызова функцииgetGS:gs = getGS( ins, 'mpeg', 1 );Вне зависимости от наличия параметров format и quality во входнойструктуре ins, возвращаемая структура gs всегда содержит эти поля, причем gs.format всегда имеет числовое значение, даже если входной параметр ins.format или значение по умолчанию заданы в текстовом виде. Этоупрощает последующее использование структуры gs.При типовой внутренней структуре каталога приложения, описаннойв статье [2], разработчик задачи может не заботится о размещении вновьсгенерированного изображения на диске компьютера, так как эту операцию также производит общая функция saveBitmap (в случае статическогоизображения) или saveMovie (в случае видеоклипа).
Поскольку в примерес диаграммой направленности генерируется статическое изображение, мыограничимся примером с использованием функции saveBitmap. Ее следуетвызвать непосредственно перед генерацией возвращаемого текстового потока rs. Так что в окончательном виде заключительная часть расчетнойфункции должна выглядеть следующим образом:% ===================================================saveBitmap( f, gs );1869Труды II научной конференции «Проектирование инженерных и научных приложений в среде MATLAB»end; % end of if( gs.isexist )if( es.count )rs = getError( es );elsers = getHtml( ins, gs );end;% end of radiationНапомним, что f — это дескриптор графического окна, созданногокомандой figure (см.
раздел 2).Функция saveBitmap сохраняет изображение, сформированное расчетной функцией в окне f, в формате gs.format с качеством, определяемымпараметром gs.quality в файле с расширением gs.type. Приведем часть текста функции saveBitmap, отвечающую за сохранение изображения в формате jpeg:print(f, '-djpeg', '-r0', gs.name);if gs.quality == 1tmp = imread(gs.name, 'jpg');imwrite(tmp, gs.filename, 'jpg', 'Quality', 25);elseif gs.quality == 3tmp = imread(gs.name, 'jpg');imwrite(tmp, gs.filename, 'jpg', 'Quality', 100);end;Для понимания приведенного фрагмента полезно иметь в виду, чтополное имя файла gs.filename функцией getGS определено как [gs.name ‘.’gs.type].Перед сохранением изображения в файл функция saveBitmap, принудительно завершает все операции с графически объектами, используявстроенную функцию MATALAB drawnow.При выборе каталога, куда функция saveBitmap сохраняет файл сграфическим изображением, предполагается, что каждое приложение размещено в отдельном каталоге, внутри которого имеется дочерний каталогmfiles с текстами функций MATLAB и дочерний каталог tmpfiles, предназначенный для хранения временных файлов, в том числе графических изображений, сгенерированных приложением.
Иными словами, каталог рассматриваемого приложения имеет следующую структуру:└─radiation├─mfiles└─tmpfilesКак показано в [2], такая структура каталогов облегчает администрирование веб сервера и позволяет в конечном итоге автоматизировать генерацию веб интерфейса. Рабочим каталогом для приложения MATLABявляется каталог mfiles. Поскольку полученное изображение необходимосохранить в «сестринский» каталог tmpfiles, функция saveBitmap в про1870Секция 7. MATLAB в образовании и Интернетестейшем случае перед записью графического файла производит переход вкаталог хранения временных файлов:cd('../tmpfiles');Чтобы избежать переполнения каталога хранения временных файлов, эта же функция производит очистку каталога, удаляя из него все файлы, срок хранения которых превысил определенный предел.
Для очисткииспользуется функция wscleanup, входящая в комплект MWS. В настоящее время мы удаляем файлы, хранящиеся более 36 часов:wscleanup('*.*', 36);Такой выбор времени хранения был выбран из соображений удобства при использовании учебных задач в лекционных демонстрациях, поскольку лектор подбирает параметры демонстраций обычно в день передлекцией.4. Генерация текстового потокаВ завершение своей миссии расчетная функция (в рассматриваемомпримере это функция radiation) должна сформировать текстовую строкуrs.
Как показано в [2], в простейшем случае можно ограничиться минимумом, который должен включать HTML тег <img> с атрибутом src, указывающим на виртуальный адрес сгенерированного графического файла навеб сайте:rs = [sprintf('Content-type: text/html\n\n') ...'<html><body>' ...'<img src=”http://MATLAB/tutornet.ru/eldin/' ...'radiation/tmpfiles/' g.filename '”></body></html>']Однако на сайте MATLAB.tutornet.ru применяется более продвинутая технология генерации возвращаемого текста. Она инкапсулирована вбиблиотечную функцию getHtml, которая уже упоминалась выше.
В общем случае функция getHtml способна принимать три аргумента, но только первые два из них обязательны. Третий аргумент может использоватьсяпри отладке задачи. Если указаны все три аргумента, то результат вызовафункцииrs = getHtml( ins, gs, outfile );помимо передачи в указанную переменную rs дополнительно записываетсяв файл outfile на жесткий диск компьютера.Соответствие физического адреса графического файла в файловойсистеме компьютера его же виртуальному адресу на веб сайте определяется настройками веб сервера.
Эта тема детально рассмотрена в статье [2].Здесь же поясним, что, получив текст, веб браузер клиента обнаружит внем тег <img> и отправит на веб сервер еще один запрос, затребовав рисунок. Веб сервер в ответ отправит рисунок с жесткого диска компьютера.На одной веб странице можно разместить несколько рисунков, сгенерированных расчетной программой, но такая возможность не реализует1871Труды II научной конференции «Проектирование инженерных и научных приложений в среде MATLAB»ся функцией getHtml, поскольку в настоящее время все задачи, размещенные на сайте MATLAB.tutornet.ru, производят построение не более чем одного статического рисунка или видеоклипа.
Функция getHtml выбираетнаиболее подходящий способ внедрения полученного графического иливидеоизображения в возвращаемый текстовой поток сообразно типу изображения (gs.format) и типу веб браузера клиента.Тип веб браузера в настоящее время автоматически определяетсяHTML формой и передается через скрытый параметр interface. Если клиентиспользует Internet Explorer версии 5.5 или выше, этому параметру присваивается значение ie. В этом случае возвращаемый текст HTML формируется с учетом расширенных возможностей браузера Internet Explorer. Вовсех остальных случаях, в том числе при отсутствии параметра interface взапросе, формируется максимально упрощенный текст HTML, которыйпредположительно должен без ошибок интерпретироваться веб браузерамиустаревших типов. MATLAB Web Server не способен самостоятельно определить тип веб браузера клиента (в отличие от большинства других серверных продуктов), что, вероятно, следует признать определенным недостатком MWS.
Поскольку в настоящее время Internet Explorer занимает доминирующее положение на рынке веб браузеров, мы не предпринималипопыток гарантировать определение типа веб браузера при любом способевызова приложения через веб браузер, а не только через HTML форму (хотя это гипотетически возможно). Вместо этого мы максимально расширили функциональные возможности возвращаемого текста HTML с помощьюклиентских скриптов JavaScript.
Эти скрипты определяют тип веб браузераи, если позволяют возможности браузера, производят дополнительные настройки возвращаемого изображения. Например, при использовании Internet Explorer’а по окончании загрузки изображения производится его автоматическое масштабирование под размер окна браузера, а ход вычисленийи загрузки отображается на экране клиента.Помимо тега <img> с атрибутом src, для отображения сгенерированного изображения используется также тег <img> с атрибутом dynsrc и тег<embed>.
Выбор тега и атрибутов основывается на анализе параметровgs.format и ins.interface. Например, <img> с атрибутом dynsrc выбираетсяфункцией getHtml для анимированного изображения в формате gif(gs.format==1) при условии, что ins.interface==’ie’. В остальных случаяхдля видеоизображения выбирается тег <embed>, а для статического рисунка (gs.format==3 | gs.format==4) — тег <img> с атрибутом src.5. Выбор веб интерфейсаСуществует четыре основных варианта встраивания приложенияMATLAB в HTML страницы.1872Секция 7. MATLAB в образовании и ИнтернетеВо-первых, приложение можно вызвать из адресной строки веб браузера.
Например, рассмотренное выше приложение реально размещено насайте MATLAB.tutornet.ru, так что диаграмму направленности, изображенную на Рис. 1, можно получить, набрав в адресной строке следующийзапрос:http://MATLAB.tutornet.ru/cgibin/matweb.exe?mlmfile=radiation&beta=0.7&alpha=30&elevation=15&azimuth=30&k=60.
Если пользователь совершитошибку в запросе, он получит исчерпывающую информацию, которая позволит легко ее устранить. Пример сообщения об ошибке приведен наРис.2. Мы используем данный способ вызова для проверки приложенийотносительно их устойчивости к злонамеренным действиям посетителейсайта.Рис. 2. Сообщение об ошибке во входных параметрах.Во-вторых, запрос на выполнение приложения можно оформить ввиде гиперссылки. Для этого в текст произвольной HTML страницы достаточно вставить тег <a>, указав параметры запроса в его атрибуте href.Например:<ahref=“http://MATLAB.tutornet.ru/cgibin/matweb.exe?mlmfile=radiation&beta=0.7&alpha=30&elevation=15&azimuth=30&k=60”>Излучение релятивистской частицы</a>.