Интернет магазин китайских планшетных компьютеров



Компьютеры - PostScript - Язык

30 апреля 2011


Оглавление:
1. PostScript
2. Область применения
3. Язык
4. Тенденции и перспективы



PostScript — полнофункциональный язык программирования. Хотя программы на PostScript и создаются в основном не людьми, а другими программами, в принципе ничто не мешает писать на нём программы для обсчёта графики, реализации численных методов решения математических задач и т. п.

PostScript — интерпретируемый стековый язык, похожий на Форт. Синтаксис языка использует обратную польскую нотацию, что делает ненужным использование скобок, однако требует некоторой практики для чтения текста программы из-за необходимости держать в голове содержимое стека. Большинство операторов берут операнды со стека и помещают результат вычислений на стек. Литералы помещают свою копию на стек.

В PostScript для рисования используется двумерная прямоугольная система координат, начало которой совпадает с левым нижним углом страницы; ось X по умолчанию направлена горизонтально, ось Y — вертикально. Единицей измерения линейных координат служит типографский пункт. С помощью операторов языка начало системы координат может быть перенесено в любую точку, а сама система — повернута на произвольный угол в плоскости страницы; масштаб по каждой из двух осей с помощью оператора scale также может быть изменен. Например, «зеркальный» вывод изображения на пленку в PostScript-принтерах осуществляется при помощи одного единственного оператора scale, задающего отрицательный масштаб по одной из осей системы координат: например, -1.0 1.0 scale.

PostScript имеет черты метафайла, совмещая поддержку как векторных, так и растровых изображений. Шрифты в PostScript только векторные. Немного особняком стоят т.н. Type3-шрифты, в которых для рисования глифы м.б. использована любая процедура, сформулированная в терминах языка PostScript. После выхода SP4 для Windows NT 4.0 в 1998 году при установленном в системе Adobe Type Manager 4.0 и драйвере AdobePS 5 все шрифты в не-roman кодировке, в частности кириллица выгружались в PostScript-файл в виде Type3-шрифтов, где каждая глифа была представлена в виде растрового изображения соответствующего разрешения. Выгрузка шрифта в виде растровых изображений создала много проблем при подготовке к выводу на фотонабор и допечатной подготовке вообще. Эта ошибка была исправлена в AdobePS 5.1 и Adobe Type Manager 4.1, которые затем вошли в дистрибутив Windows 2000.

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

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

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

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

%!PS-Adobe-2.0
%%Creator: dvips 5.78 Copyright 1998 Radical Eye Software
%%Title: rep.dvi
%%Pages: 9
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%EndComments

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

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

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

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

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

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

Стеки

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

Типы данных

Основные типы данных языка PostScript: целое число со знаком, вещественное число, логическое выражение, строка символов , массив , процедура , словарь, имя.

Операторы

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

4 5 add

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

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

Процесс рисования при выполнении PostScript-программы заключается в вычислении для каждого пиксела устройства вывода одного или нескольких значений параметра в диапазоне от 0 до 1.0. Вычисленное значение параметра используется в качестве аргумента ещё одной важной функции — transfer function. По умолчанию в подавляющем большинстве случаев эта функция представляет собой простейшую функцию y=x и её значение тождественно равно значению аргумента. Однако в ряде случаев — например для компенсации растискивания используются достаточно сложные нелинейные зависимости y, задаваемые кусочной либо табличной аппроксимацией. Кусочно-линейная аппроксимация transfer function используется например в EPS- и PS-файлах Adobe Photoshop — для аппроксимации используется разбивка области определения на сорок участков с шагом 0.025; на каждом из сорока участков transfer function имеет вид y=b·x+a. Transfer function вида y=1-x обращает изображение, делая из него негатив — именно таким образом печатают негатив PostScript-принтеры.

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

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

Пример программы

%!PS-Adobe-1.0
% По умолчанию, постскрипт использует единицу измерения 1 пункт=1/72 дюйма, 
% а нам нравятся миллиметры.
72 25.4 div           % 1 мм = 72/25.4 пунктов
dup                   % дублировать значение на вершине стека
scale                 % растянуть в это количество раз по обеим координатам
100 100 translate     % установить начало координат в
 
/Times-Roman findfont % взять шрифт Times-Roman
10 scalefont          % растянуть до размера 10
setfont               % установить выбранный шрифт
 
0 30 330 {            % цикл для углов от 0 до 330 с шагом 30
  gsave                 % запомнить текущее преобразование координат
    rotate              % повернуть систему координат
    15 0 moveto         % перейти в точку
    show    % написать слово текущим шрифтом
  grestore              % вернуть преобразование координат
} for                 % конец цикла for
 
showpage              % вывести страницу

Вывод программы

Вывод программы


Просмотров: 4204


<<< OpenVG
VML >>>