Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций ПСОИ.docx
Скачиваний:
93
Добавлен:
16.03.2015
Размер:
92.84 Кб
Скачать

Структура документа

Структура файла PostScript формируется структурными комментариями [14]. Структурные комментарии начинаются с последовательности символов «%%» в начале строки.

Файл PostScript состоит из четырёх частей: заголовка, пролога, тела и эпилога.

Заголовок начинается строкой «%!PS-Adobe-N.M» где N.M — версия спецификации, далее идут структурные комментарии с общими свойствами документа, и заканчивается заголовок строкой «%%EndComments».

В прологе обычно содержатся описания подпрограмм и данные, необходимые для печати документа — например, процедуры и шрифты. Пролог заканчивается комментарием «%%EndProlog».

В теле программы содержатся команды, отвечающие за отрисовку каждой страницы, предваряемые строкой «%%Page: <метка> <номер>», где <метка> — метка страницы, которая не выводится на печать, и <номер> — порядковый номер страницы в файле, например, %%Page: iii 3

После команд отрисовки всех страниц идёт структурный комментарий «%%Trailer», после чего начинается эпилог.

В эпилоге можно продублировать комментарии из заголовка (это реализовано на случай, если в начале вывода программе ещё не известно, например, число страниц) — в этом случае вместо числовых значений параметров в заголовке надо писать «(atend)».

Заканчивается файл строкой «%%EOF».

Обзор элементов языка

Стеки

В PostScript для хранения данных разных типов используются четыре стека: стек операндов, стек графических контекстов, стек исполнения, стек словарей.

Типы данных

Основные типы данных языка PostScript: целое число со знаком, вещественное число, логическое выражение (true или false), строка символов ( ( … ) ), массив ( [ … ] ), процедура ( { … } ), словарь, имя.

Операторы

Операторы в PostScript получают операнды (параметры), вынимая их из стека, и записывают результаты действий (если они есть) также в стек. Такой стиль программирования, при котором операнды задаются до операции над ними (оператора), называется постфиксной нотацией. Например, для сложения двух заданных чисел необходимо вначале поместить их в вершину стека операндов, затем выполнить команду add, которая извлечёт из стека два элемента, помещённые последними (то есть заданные числа), сложит их и запишет результат в стек, откуда он сможет быть извлечён другой операцией в качестве операнда. Это записывается так: 4 5 add

Операторы PostScript можно разделить на несколько групп. Это операторы для работы с содержимым стека (независимо от типа), арифметические операции, операторы работы с массивами, работы со словарями, работы со строками, сравнения, управления потоком команд, работы с типом аргументов и преобразования, доступа и работы с файлами, работы с виртуальной памятью, графического состояния и другие. Описания операторов PostScript можно найти в [5, 6], краткие описания наиболее употребительных операторов на русском языке можно найти в [1].

Краткий обзор механизма рисования изображения

Процесс рисования (растрирования) при выполнении (интерпретации) PostScript-программы заключается в вычислении для каждого пиксела устройства вывода одного (для монохромного) или нескольких (например четырёх для CМYK-устройства или шести для CMYKOrGr) значений параметра (-ов) в диапазоне от 0 до 1.0. Вычисленное значение параметра (-ов) используется в качестве аргумента ещё одной важной функции — transfer function [6, pp. 478–480] (русскоязычный синоним — отображение). По умолчанию в подавляющем большинстве случаев эта функция представляет собой простейшую функцию y(x)=x и её значение тождественно равно значению аргумента. Однако в ряде случаев — например для компенсации растискивания используются достаточно сложные нелинейные зависимости y(x), задаваемые кусочной либо табличной аппроксимацией. Кусочно-линейная аппроксимация transfer function используется например в EPS- и PS-файлах Adobe Photoshop — для аппроксимации используется разбивка области определения [0;1.0] на сорок участков с шагом 0.025 (2.5% растровой точки); на каждом из сорока участков transfer function имеет вид y(x)=b·x+a. Transfer function вида y(x)=1-x (в терминах PostScript language {1 sub neg} settransfer) обращает изображение, делая из него негатив — именно таким образом печатают негатив PostScript-принтеры.

Для монохромных устройств — например для фотонабора, решение о закрашивании (засветке) пикселя может приниматься в результате сравнения вычисленного для данного пиксела значения transfer function и значения т.н. Spot-функции либо двумерного массива Threshold array [6, pp. 484–490], [15]: в случае, если значение transfer function больше значения Spot-функции или элемента Threshold array для этого пиксела последний закрашивается (засвечивается). Специальный подбор transfer function и Spot-функции или Threshold array позволяет получить отношение числа закрашенных и незакрашенных пикселей устройства вывода для каждого пиксела исходного (растрируемого) изображения таким, что на оттиске (отпечатке) средняя яркость соответствующего участка изображения почти пропорциональна значению вычисленного параметра (см. выше).

Подобным образом формируется точки различного размера, из которых состоит полутоновое изображение на типографских оттисках: в газетах, журналах, книгах.