Разное

Язык программирования postscript: Краткий курс языка программирования PostScript

Краткий курс языка программирования PostScript

В предыдущей статье я писал, что PostScript стековый язык программирования, но не форт. Строго говоря, это так. Но разница между ними невелика. Эта статья больше памятка для себя, чем толковое описание PostScript.

Postscript — весьма старый язык программирования. И, строго говоря, это не совсем язык программирования. Он был создан в середине 80-х годов фирмой Adobe как универсальный язык управления абстрактным графическим устройством, реальным прототипом которого выступал лазерный принтер. Необходимость такого языка объяснялась маленькой мощностью компьютеров того времени и медленными интерфейсами передачи данных. Сегодня можно сформировать всю страницу для печати на компьютере и передать на печать как растровую картинку. Это почти не нагрузит ни компьютер ни увеличит время печати. Разве что чуть-чуть. Но в те времена у среднего компьютера просто не хватало оперативной памяти, чтобы прорисовать страницу для печати в цвете и с высоким разрешением.

Язык Postscript просто позволял переложить эту работу на специализированный контроллер принтера. Для нас ва жно то, что Postscript не просто язык управления принтером, а язык программирования на котором пишутся программы для принтера. Например, если нужно выполнить простейшую задачу и напечатать лист с линейной разметкой. Язык управления принтером должен направить принтеру указание напечатать столько-то линий на таком-то расстоянии друг от друга. При этом программа на Postscript может просто запустить на принтере цикл и напечатать линовку не отвлекая компьютер.

Одно из важных преимуществ Форта — этот язык одновременно и интерпретируемый и компилируемый. Программировать можно в диалоговом режиме, постепенно развивая словарь для создания нужной программы. Как это делается в других интерпретируемых языках. В качестве среды исполнения программ я использую Ghostscript. Файл “gswin64.exe” как раз запускает интерпретатор языка PostScript

При этом открывается окно Ghostscript Image куда будут выводиться результаты выполнения программы. Я не буду касаться того, как работают стековые языки, а сразу приступлю к описанию параллелей между Форт и Postscript.

Path

Я не буду переводить это на русский язык, хорошего аналога нет. Самый подходящий перевод — “контур”, но это слово нигде не используется. Path — это совокупность графических примитивов (линий, дуг, текстовых строк и т.п.). Path группирует эти графические элементы, так что с ними можно проводить общие операции. Например, чтобы нарисовать квадрат, нужно собрать четыре линии образующие стороны квадрата внутри path, тогда для них можно задать единую ширину линий, сделать заливку и т.п. Если каждая линия будет в собственном path, то параметры каждой линии придётсяс задавать отдельно, а выполнить заливку и вовсе не получится.

Есть также специальный clipping path, это path, который задаёт границы в которых можно рисовать. Всё, что рисуется за границами clipping path просто не будет отображаться. По умолчанию clipping path соответствует границам листа. Но это поведение можно и переопределить. В типографском деле clipping path называют “обтравочный контур”, это неплхо знать, но я так называть не буду.

Система коодинат

Язык Postscript изначально предназначен для создания изображений, поэтому система координат — одна из базовых вещей языка. Ситема координат — аппаратно независимая. Например, при рисовании на экране система координат обычно аппаратно-зависимая, т.к. рисование зависит от количества пикселей на области рисования, её разрешающей способности. Используются декартовы координаты, начало координат слева внизу, ось X идёт направо, ось Y — вверх. Базовая единица измерений — “пункт”, равный 1/72 дюйма. Это типографская мера длины. Систему координат можно менять, масштабировать, вращать и т.п. средствами самого языка. Иногда это создаёт удобство при рисовании

Арифметические операции

Арифметические операции задаются словами, а не знаками арифметики. Знаки арифметических операций не рабтают, хотя никто не мешает переопределить слова, чтобы делать операции в привычном виде.

add — сложение; sub — вычитание; div — деление. Важное отличие Postscript от Форт в том, что в Postscript базовая арифметика — числа с плавающей точкой. При этом второй элемент стека делится на первый элемент стека. idiv — целочисленное деление; mod — целочисленный остаток от деления; neg — изменение знака числа.

В Postscript используется обратная польская нотация, так что арифметические операции работают в точности так же, как в Форте.

Операции над стеком

Стек — это основная особенность стековых языков программирования, которые включают в себя Форт, Postscript и некоторые другие. Как и в большинстве языков стек используется в режиме LIFO (последним пришёл, первым вышел). Стек используется для хранения данных. Все слова (операторы языка) используют данные, хранимые на стеке. Стек переводится на русский, как стопка. И это лучшая иллюстрация идеи. Представьте, что у вас стопка бумаг, на которых записаны значения, с которыми работает язык.

Слово последовательно берёт из этой стопки бумажки, начиная с верхней, прводит необходимые операции и результат этих операций снова записывается на бумажки, которые складываются в стопку. Таким образом, операция

5 100 mul

Приведёт к тому, что два числа со стека будут умножены друг на друга, а вместо них будет записан результат умножения 5×100.

clear — очистка стека; dup — удвоение числа на вершине стека; pop — удаление числа на вершине стека; exch — меняет местами два верхних элемента стека; roll — прокручивание стека, при этом два верхних элемента стека — это аргументы операции, верхнее число задаёт сколько элементов и в каком направлении прокручивать, второе число — сколько элементов прокручивать. Таким образом:

7 8 9 3 1 roll --> 9 7 8
7 8 9 3 -1 roll --> 8 9 7

pstack — печать всего содержимого стека, при этом стек сохраняется; == — печать верхнего элемента стека, при этом он удаляется.

Базовые графические операции

Графика в языке Postscript рисуется невидимым “карандашом”. Каждая линия при рисовании — вектор с координатами начала и конца. Но в Postscript принято указывать две координаты — координаты конца линии. Начальная позиция соответсвует последней точке, на которой закончилось рисование предыдущей линии. Слова fill, stroke и некоторые другие сбрасывают эту позицию и её нужно задавать заново.

newpath — этим оператором создаётся новый элемент для рисования, аналог canvas во многих графических средах;

moveto — позицию начала рисования в координаты x y, координаты берутся с вершины стека. То есть: 144 72 moveto lineto — чертит линию в абсолютные координаты x, y заданные на вершине стека. rlineto — чертит линию в относительные координаты x, y заданные на вершине стека. Координаты задаются относительно последней точки заданной предыдущими командами графических примитивов или moveto. setlinewidth — задаёт ширину линий в пунктах. Пункт — типографская мера длины, 1/72 дюйма. closepath — проводит линию от текущей точки рисования до последней точки, заданной оператором moveto. Это позволяет строить аккуратные замкнутые фигуры. stroke — отображает всё, что быо нарисовано в newpath, т.к. предыдущие операторы задают графические примитвы, но не отображают их до этой команды;
fill
— делает заливку текущего path. setgray — устанавливает цвета в градациях серого. showpage — печатает страницу. Это команда для принтера, которая говорит, что вся страница сформирована и пора печатать. Если достаточно посмотреть содержимое страницы на экране — showpage не нужен, а в Encapsulated postscript, который и предназначен для показа на экране, эта команда запрещена. Поскольку мои примеры для вывода на экран, а не на принтер — я не привожу команду showpage дальше по тексту. Просто знайте, если отправляете файл на принтер — showpage добавить нужно.

Таким образом, простейшая программа для рисования квадрата будет такой.

newpath
    270 360 moveto
    0 72 rlineto
    72 0 rlineto
    0 -72 rlineto
   -72 0 rlineto
    closepath
    4 setlinewidth
stroke

Операции с текстом

Язык Postscript и создавался для операций с текстом. Его возможности очень обширны и только некоторые из них будут приведены здесь. Текстовые строки в этом языке обрабатываются как любая другая графика. Ниже приведено несколько примеров по работе с текстом.

Изменение системы координат

Так как в Postscript используется пользовательская система координат — её тоже можно менять.

translate — переносит начало системы координат в новую точку. rotate — позволяет повернуть оси системы координат на заданный угол, он отсчитывается от вертикальной оси против часовой стрелки. scale — позволяет изменить масштаб по каждой из координатных осей отдельно, поэтому параметра 2, scaleX и scaleY, масштаб по осям x и y соответственно.

Эта страница даже не пытается быть учебником по языку программирования Postscript. Для этого есть другие ресурсы, где можно найти куда больше информации.

  1. PostScript Tutorial — на английском языке, но очень краткое и на простом языке. Хотел бы я научиться так писать краткие пособия. Оно написано в 1998 году, но даёт всё необходимую информацию для начала работы.
  2. Mathematical illustrations — этой книгой можно было бы и ограничиться. Это именно учебник по компьютерной графике на Postscript. от основ языка до трёхмерной графики на Postscript. В книге рассматривается и теория, т.е. уравнения двух и трёх-мерной графики. При этом объём каждой главы довольно невелик, а английский довольно несложен.
  3. POSTSCRIPT УМЕР ДА ЗДРАВСТВУЕТ PDF?! — статья, где хорошо описана история создания Postscript и его дальнейшая судьба. В статье довольно много информации о недостатках Postscript, но они специфичны для издательского дела. На русском языке.
  4. Стековые языки — публикация в блоге, которая полностью соответствует названию, она описывает стековые языки. Маленькая статья, но приводит краткие сведения о многих стековых языках. На русском языке.
  5. Getting started with postscript — хорошее вводное руководство по языку Postscript с полезными сслылками. Документ изначально на английском языке, но поддерживается автоперевод на другие языки, включая русский. Качеество страдает.
  6. Русскоязычный сайт с материалами о Postscript. Он давно не обновляется, но работает и содержит все необходимые сведения на русском языке.

Подборка исчерпывающая. Из этих ресурсов мы можете узнать о Postscript больше, чем когда-либо хотели бы знать.

Языки программирования

 

Язык программирования Postscript
Автор Джон Уорнок (John Edward Warnock)
Чак Гешке (Charles Geschke)

 

John Edward Warnock

06.

10.1940

Charles Geschke

11.09.1939

История

Postscript был разработан Джоном Уорноком и Чаком Гешке из Adobe Systems в начале 80-х гг. Исходно Postscript использовался как ядро механизма печати компьютеров Apple, но вскоре стал широко распространенным стандартом для большинства компьютерных систем. Интерпретаторы Postscript (в виде программных или аппаратных компонентов) для печати документов присутствуют практически во всех современных компьютерных системах. В Postscript используется модель изображения текста (или рисунков) на чистой странице. Когда страница готова, она выводится на печать и начинается «npорисовка» изображения очередной страницы. Это есть не что иное, как метод компиляции. Каждый документ Postscript включает в себя программу, которая печатает на принтере (или отображает на экране монитора) следующие друг за другом страницы.

> Программа Postscript состоит из четырех компонентов: 1. Интерпретатор для выполнения вычислений. Основной моделью такого интерпретатора является простой стек постфиксного выполнения.

2. Синтаксис языка. Он основан на синтаксисе языка Forth.

3. Расширения для раскрашивания. Расширение языка Forth командами закрашивания для управления процессом отображения текста и рисунков на листе бумаги.

4. Соглашения. Набор соглашений, не входящих в официальный язык Postcript; которые используют различные принтеры для согласования представле документов. Использование этих соглашений упрощает передачу документов Postscript из одной системы в другую.

Краткий обзор языка

Postscript был разработан как архитектура виртуальной машины, предназначенной для создания печатных документов. В большинстве приложений не предполагается, что программист будет читать текст документа Postscript.

Тем не менее синтаксис Postscript достаточно прост и легок для восприятия.

Существуют образовательные программы для обучения этому языку программирования. Его синтаксис и семантика отличаются простотой, а доступность программ для отображения на экране документов Postscript означает, что у любого пользователя имеется возможность доступа к интерпретатору виртуальной машины, на которой можно тестировать свои Postscript-программы. Следующим этапом развития Postscript стало создание фирмой Adobe формата PDF (Portable Document Format — формат переносимых документов). PDF -это форма сжатия файлов Postscript. Программы чтения PDF-файлов свободно распространяются по Интернету, а большинство web-браузеров могут отображать PDF-файлы. Формат PDF повсеместно используется для передачи и отображения форматированных документов.

Бесплатное распространение программ чтения PDF-файлов можно считать тонким ходом фирмы Adobe, так как теперь она продает программу Acrobat, необходимую для создания файлов в формате PDF.

Пример


программы, которая рисует квадрат со стороной один дюйм, расположенный в центре страницы


newpath
200 300 moveto
0 72 rlineto
0 -72 rlineto
-72 0 rlineto
5 setlinewidth
stroke
showpage 


 

Учебное пособие по PostScript

Написано Полом Бурком
Оригинал: ноябрь 1990 г. Последнее обновление: декабрь 1998 г.

Перевод на болгарский язык Альберта Уорда.
Перевод на украинский язык предоставлен Дмитрием Нечупориком.

Справочное руководство


Введение

Postscript — это язык программирования, предназначенный для указания макет печатной страницы. Принтеры Postscript и дисплей Postscript программное обеспечение использует интерпретатор для преобразования описания страницы в отображаемая графика.

Следующая информация разработана в качестве первого руководства к постскриптуму. язык. Он будет сосредоточен на том, как использовать PostScript для создания графики. а не изучать его как язык программирования. К концу вы должны чувствовать себя уверенно в написании простых программы postscript для рисования графики и текста. Дальнейшая информация а полную спецификацию языка можно получить по адресу Справочное руководство по языку Postscript от Adobe Systems Inc, опубликовано Addison-Wesley, Reading, Massachusetts, 19.85.

Зачем учить постскриптум, ведь многие программы могут его сгенерировать за вас а драйверы печати postscript могут печатать в файл? Некоторые причины могут быть:

  • Прямой вывод в постскриптуме часто может привести к гораздо более эффективному постскриптум, постскриптум, который печатается быстрее, чем более общий вывод из драйверов принтера.
  • Во многих случаях непосредственное создание постскриптума может привести к в гораздо лучшем качестве. Например, при рисовании многих типов фракталов там, где необходимо высокое разрешение, возможность рисовать на родном желательно высокое разрешение постскриптумного принтера.
  • Коммерческие пакеты нередко допускают ошибки при вывод постскриптума. Возможность посмотреть на постскриптум и сделать некоторые понимание того, что происходит, иногда может дать представление о том, как исправить проблема.

Основы

Файлы Postscript (как правило) представляют собой обычные текстовые файлы, поэтому их можно легко генерируются вручную или в качестве вывода программ, написанных пользователем. Как и в большинстве языков программирования, файлы PostScript (программы) должен быть хотя бы частично удобочитаемым для человека. Таким образом, они вообще свободный формат, то есть текст можно разбивать по строкам и с отступом, чтобы выделить логическую структуру.
Комментарии могут быть вставлены в любом месте файла PostScript с процентом (%) символ, комментарий применяется от % до конца строки.
Хотя это и не является частью спецификации постскриптума, первая строка файл postscript часто начинается с %!. Это делается для того, чтобы спулеры и другие программное обеспечение для печати обнаруживает, что файл должен интерпретироваться как постскриптум вместо простого текстового файла. Встроенный пример ниже не будет включать это но файлы PostScript, связанные с этой страницы, будут включать его, поскольку они предназначены для прямой печати.
Первая команда постскриптума, которую нужно выучить, это showpage . принтер для печати страницы с тем, что в данный момент на ней нарисовано. Примеры приведенная ниже печать на отдельных страницах, поэтому в конце есть демонстрационная страница файла в каждом примере, см. комментарии позже относительно EPS.

Путь

Путь — это совокупность, возможно, несвязанных линий и областей, описывающих Изображение. Путь сам по себе не рисуется, после его указания его можно заштрихованы (линии) или заполнены (области), делая соответствующие отметки на странице. Существует специальный тип пути, называемый путем отсечения, это путь внутри которых ограничен будущий рисунок. По умолчанию путь отсечения прямоугольник, который соответствует границе бумаги, он не будет изменен во время этого урока.

Стек

Postscript использует стек, также известный как LIFO (Last In First Out). стек для хранения программ и данных. Интерпретатор постскриптума помещает программа postscript в стеке и выполняет ее, инструкции, которые require data будет считывать эти данные из стека. Например, есть оператор в постскриптуме для умножения двух чисел, mul . это требует два аргумента, а именно два числа, которые нужно умножить вместе. В постскриптуме это может быть указано как

   10 20 мул
 

Интерпретатор поместит в стек 10, а затем 20. Оператор mul удалит 20, а затем 10 из стека, умножьте их вместе и оставьте результат 200 в стеке.

Система координат

Postscript использует систему координат, которая не зависит от устройства, т. е. он не зависит от разрешения, размера бумаги и т. д. конечного вывода. устройство. Исходная система координат имеет ось x справа и ось y вверх, начало координат находится в нижнем левом углу страницы. Единицы представляют собой «точки», длина которых составляет 1/72 дюйма. Другими словами, если мы проведем линию от постскриптумной координаты (72,72) до (144,72), мы получим иметь линию, начинающуюся на один дюйм слева и справа от страницы, линия будет горизонтальной и иметь длину один дюйм.

Систему координат можно изменить, то есть масштабировать, поворачивать и перемещать. Часто это делается для того, чтобы сформировать более удобную систему для конкретного создается рисунок.

Основные команды рисования

Пора что-нибудь нарисовать. Следующее состоит из ряда операторов и данные, некоторые операторы, такие как newpath , не нуждаются в аргументах, другие например, строк до берут два аргумента из стека. Все примеры в этом тексте показаны в виде постскриптума слева с результирующим изображение справа. Текст слева также действует как ссылка на печатную форму. форме файла постскриптума.

новый путь
100 200 переехать
200 250 строк
100 300 строк
2 setlinewidth
гладить
 

Также существуют относительные команды moveto и lineto, а именно rmoveto и rlineto .

В следующем примере объект с заливкой будет нарисован в определенном месте. оттенок, как для контура, так и для интерьера. Диапазон оттенков от 0 (черный) до 1 (белый). Обратите внимание на closepath , который соединяет первую вершину путь с последним.

новый путь
100 200 переехать
200 250 строк
100 300 строк
близкий путь
гсохранить
0,5 сетсерый
наполнять
грестор
4 setlinewidth
0,75 сетсерый
гладить
 

Команды рисования, такие как штрих и заполнение уничтожают текущий путь, способ обойти это — использовать gsave , который сохраняет текущий путь, чтобы его можно было восстановить с помощью grestore .

Текст

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

/Times-Roman findfont
12 масштабный шрифт
установить шрифт
новый путь
100 200 переехать
(Пример 3) показать
 

Как и следовало ожидать, позиция (100 200) выше указывает позицию нижнего левого угла текстовой строки. Первые три строчки в приведенный выше пример — это уборка, которую необходимо выполнить в первый раз используется шрифт. По умолчанию размер шрифта равен 1 пункту, затем устанавливается масштабный шрифт. размер шрифта в пунктах (1/72 дюйма). Скобки вокруг слов «Пример 3» указывает, что это строка.

Слегка модифицированная версия вышеприведенного использует charpath для обработки символы в строке в виде пути, который можно погладить или заполнить.

/Times-Roman findfont
32 масштабный шрифт
установить шрифт
100 200 перевод
45 повернуть
2 1 шкала
новый путь
0 0
(Пример 4) истинный charpath
0,5 setlinewidth
0,4 сетсерый
гладить
 

Вы должны убедиться, что понимаете порядок операторов выше и результирующая ориентация и масштаб текста, процедурно это рисует текст, масштабировать ось y с коэффициентом 2, вращать счетчик по часовой стрелке вокруг начала координат, наконец, переведите систему координат до (100 200).

Цвет

Для тех, у кого есть цветные LaserWriters, основная интересующая инструкция, которая заменяет setgray в предыдущих примерах setrgbcolor . Требуется 3 аргумента, красно-зелено-синие компоненты цвета каждый варьируется от 0 до 1.

новый путь
100 100 двигаться к
0 100 rlineto
100 0 rlineto
0 -100 rlineto
-100 0 rlineto
близкий путь
гсохранить
0,5 1 0,5 setrgbcolor
наполнять
грестор
1 0 0 setrgbcolor
4 setlinewidth
гладить
 

Программирование

Как упоминалось во введении, постскриптум — это язык программирования. Полный объем этого языка здесь не рассматривается, за исключением демонстрации некоторые примеры процедур, которые могут быть полезны для упрощения постскриптума генерации и сделать файлы PostScript меньше.
Допустим, нужно нарисовать много квадратов без границ, но заполнены определенным цветом. Можно было бы создать путь повторно для каждого из них, в качестве альтернативы, можно было бы определить что-то вроде следующего.

/ квадрат {
   новый путь
   0 0
   0 1 rlineto
   1 0 rlineto
   0 -1 rlineto
   близкий путь
   setrgbcolor
   наполнять
} определение
20 20 шкала
5 5 перевести
1 0 0 cквадрат
1 0 перевести
0 1 0 cквадрат
1 0 перевести
0 0 1 cквадрат
 

Эта процедура рисует три цветных квадрата рядом друг с другом, каждый 20/72 дюйма квадрат, обратите внимание на масштаб из 20 в системе координат. Процедура рисует единичный квадрат и ожидает, что цвет RGB будет в стеке. Это можно использовать как метод (хотя и неэффективный) рисования растровое изображение.

Даже если вы просто рисуете много линий на странице, чтобы уменьшить Размер файла обычно определяется процедурой, как показано ниже. Это просто определяет один символ «l» для рисования сегмента линии, затем можно использовать команды типа 100 200 200 200 l», чтобы нарисовать отрезок от (100 200) до (200,200).

   /l { новый путь перейти к строке к штриху } def
 

Некоторые другие полезные команды

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

дуга

Рисует дугу (включая окружность). Аргументы: xcenter, ycenter, радиус, начальный угол, конечный угол. Дуга рисуется против часовой стрелки, углы выражены в градусах.

текущая точка

Это пример инструкции, которая не принимает аргументов, но оставляет числа в стеке, а именно координаты текущей точки.

тире

Это устанавливает атрибут тире линии с точки зрения массива пробелов. Точно так же, как строки обозначаются круглыми фигурными скобками (), массивы обозначаются квадратными скобки []. Например, следующая команда «[3 3] 0 setdash» сделает любые следующие строки имеют тире из 3 единиц, за которым следует пробел из 3 единиц. Аргумент после массива тире — это смещение начала первого тире.

setlinecap

Указывает, как выглядят концы штриховой линии. Требуется один аргумент, который может быть равен 0 (заглушки), 1 (круглые заглушки) или 2 (удлиненные заглушки). колпачки). Радиус круглых заглушек и вылет торцевых заглушек составляет определяется толщиной линии.

/ЛИНИЯ {
   новый путь
   0 0
   100 0 линиято
   гладить
} определение
100 200 перевод
10 setlinewidth 0 setlinecap 0 setgray LINE
1 setlinewidth 1 setgray LINE
0 20 перевести
10 setlinewidth 1 setlinecap 0 setgray LINE
1 setlinewidth 1 setgray LINE
0 20 перевести
10 setlinewidth 2 setlinecap 0 setgray LINE
1 setlinewidth 1 setgray LINE
 
setlinejoin

Это определяет внешний вид линий соединения. Он принимает один аргумент, который может быть равен 0 (угловое соединение), 1 (круглое соединение) или 2 (стыковое соединение).

/УГОЛ {
   новый путь
   100 0 двигаться к
   0 0 линиято
   100 50 строк
   гладить
} определение
10 setlinewidth
0 setlinejoin
100 200 перевод
УГОЛ
1 setlinejoin
0 70 перевести
УГОЛ
2 setlinejoin
0 70 перевести
УГОЛ
 
кривая к

Это рисует кривую Безье, определяемую тремя точками, заданными в качестве аргументов. Кривая начинается в текущей точке, заканчивается в последней точке, и касательные задаются линией между первой-второй и второй-третьей пара.

сохранить и восстановить

Вместо того, чтобы «отменять» изменения в графическом состоянии, можно используя сохранить , чтобы поместить все графическое состояние в стек и затем восстановите его позже с помощью restore .

Рисунок «маленький» Изображения

Печать изображений с использованием постскриптума несколько сложнее, чем графика обсуждалась до сих пор. Будут представлены примеры двух типов изображений, изображения в оттенках серого (которые также можно использовать для черно-белых изображений) и 24-битные изображения RGB.

8-битная шкала серого

Самый простой метод, применимый к небольшим images — это команда постскриптума image . Это принимает 5 аргументов: ширина и высота изображения, биты на пиксель, преобразование матрица (6 чисел) и, наконец, процедура получения данных изображения. В следующем примере изображение в градациях серого (8 бит) имеет ширину 24 пикселя и высоту 34 пикселя. Поскольку в постскриптуме изображение определяется из левого нижнего угла, и изображение определяется из его верхнего левого угла, преобразование матрица, используемая здесь, выполняет соответствующее вертикальное отражение. Процедура используемая здесь, по сути, нулевая процедура, это шестнадцатеричная строка как указано в угловых скобках. Postscript отображает изображения как одна квадратная точка, следовательно, масштабирование на 24 по горизонтали и 34 по вертикали. В этом обсуждении осталось много деталей, читателю необходимо для получения дополнительной информации обратитесь к справочному руководству Postscript.

100 200 перевод
26 34 шкала
26 34 8 [26 0 0 -34 0 34]
{<
фффффффффффффффффффффффффффффффффффффффффффффффффффффффффффф
ff00000000000000000000000000000000000000ffffffffffffffff
ff00effefefefefefefefefefefefefefefef0000ffffffffffffff
ff00effefefefefefefefefefefefefefefef00ce00ffffffffff
ff00effefefefefefefefefefefefefefefef00cece00ffffffff
ff00effefefefefefefefefefefefefefef00cecece00ffffff
ff00effefefefefefefefefefefefefefef00cecececece00ffff
ff00effefefefefefefefefefefefefefef000000000000000ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00efef000000ef000000ef000000ef0000ef0000efefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00efef000000ef00000000ef00000000ef000000efefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00efef0000ef00000000000000ef000000ef0000efefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00effefefefefefefefefefefefefefefefefefefefefef00ff
ff00000000000000000000000000000000000000000000000000ff
фффффффффффффффффффффффффффффффффффффффффффффффффффффффффффф
>}
изображение
 

24-битный цвет RGB

Изображения RGB с 8 битами на пиксель могут быть представлены в постскриптуме с помощью команда colorimage , которая очень похожа на команду image . В следующем примере изображение имеет ширину 32 пикселя и высоту 38 пикселей.

100 200 перевод
32 38 шкала
32 38 8 [32 0 0 -38 0 38]
{<
1dfb0023fb002afb0031fb0037fb003ffb00
66fb006cfb0073fb0079фб0081фб0086фб00
adfb00b5fb00bbfb00c3fb00c8fb00cffb00
23f5002af50031f50037f5003ff50044f500
           ...резать...
3807003f08004508004c0800520800590800
8108008608008д07009308009а0700а20800
c90800d00800d60800dd0800e40700ea0700
>}
ложное 3 цветное изображение
 

Что такое EPS?

EPS (Encapsulated PostScript) — это обычный постскриптум с некоторыми ограничениями. и несколько комментариев в указанном формате, которые предоставляют больше информации о последующий постскриптум. Это было сделано для того, чтобы приложениям было проще включать постскриптум. созданные в другом месте на их собственных страницах. Полную спецификацию можно получить в Adobe, но для создания файла постскриптума DSC (Adobe’s Document Structuring Convention) должно быть верно следующее:

Возможно, самое главное, поскольку обычно приложение, поддерживающее вставка файла postscript не имеет полного интерпретатора postscript, файл EPS обычно имеет изображение предварительного просмотра, связанное с ним. Приложение работа с файлом EPS может отображать предварительный просмотр в пользовательском интерфейсе давая лучшее представление о том, что будет напечатано. Следует отметить, что превью EPS являются одним из наиболее зависимых от машины/ОС аспектов EPS.

Часто используемые комментарии

Комментарии, конечно, могут быть добавлены где угодно, и они будут проигнорированы переводчик. Есть несколько стандартных комментариев, наиболее распространенные из которых перечислены ниже. Текст в квадратных скобках заменить с соответствующим текстом для файла, в котором они появляются (без []).

   %!PS-Adobe-3.0 EPSF-3.0
   %%Creator: [обычно программа, сгенерировавшая постскриптум]
   %%Title: [описательное имя или просто имя файла]
   %%CreationDate: [дата создания файла]
   %%DocumentData: Clean7Bit
   %%Происхождение: [например: 0 0]
   %%BoundingBox: xmin ymin xmax ymax
   %%LanguageLevel: 2 [может быть 1 2 или 3]
   %%Страниц: 1
   %%Страница: 1 1
   %%EOF
 

Рисование «больших» изображений

Из-за длины строки и других ограничений преобразование «больших» растровых изображений в postscript требует изменения методов, обсуждавшихся ранее. Далее будет описан наиболее общий случай представления 24-битного Цветное изображение RGB в виде файла EPS. Хотя это неэффективно, это также можно использовать для изображений в оттенках серого и даже черно-белых. В следующем коде «ширина» и «высота» должны быть заменены на числа, соответствующие изображению.

%!PS-Adobe-3.0 EPSF-3.0
%%Создатель: кто-то или что-то
%%BoundingBox: 0 0 ширина высота
%%LanguageLevel: 2
%%Страниц: 1
%%DocumentData: Clean7Bit
шкала ширины и высоты
ширина высота 8 [ширина 0 0 -высота 0 высота
{currentfile 3 ширина mul string readhexstring pop} привязка
ложное 3 цветное изображение
...сокращение шестнадцатеричной информации...
%%EOF
 

Модификации для изображений в оттенках серого довольно просты, измените строку

   {currentfile 3 ширина mul string readhexstring pop} привязка
 
к
   {текущая ширина файла строка readhexstring pop} привязка
 

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

Размеры бумаги

   Размер бумаги (в пунктах)
   ------------------ ---------------------
   Сообщение #10 Конверт 297 х 684
   Конверт C5 461 x 648
   Конверт DL 312 x 624
   Фолио 595 х 935
   Исполнительный 522 x 756
   Письмо 612 х 792
   Легальный 612 x 1008
   Леджер 1224 x 792
   Таблоид 792 x 1224
   А0 2384 х 3370
   А1 1684 х 2384
   А2 1191 х 1684
   А3 842 х 1191
   А4 595 х 842
   А5 420 х 595
   А6 297 х 420
   А7 210 х 297
   А8 148 х 210
   А9 105 х 148
   В0 2920 х 4127
   В1 2064 х 2920
   В2 1460 х 2064
   B3 1032 х 1460
   Б4 729х 1032
   В5 516 х 729
   В6 363 х 516
   В7 258 х 363
   В8 181 х 258
   В9 127 х 181
   В10 91 х 127
 
 

PostScript — это язык программирования

Перейти к содержимому

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

  • Как и другие компьютерные языки, PostScript поддерживает различные типы данных, такие как числа, массивы и строки. В программе PostScript могут быть циклы, условные операторы и процедуры. Язык чем-то напоминает язык программирования Forth.
  • Синтаксис языка описан в так называемой Красной книге, которую можно найти здесь. Как и во всех компьютерных языках, малейшее отклонение от четко определенных соглашений языка приводит к сообщению об ошибке и компьютерной системе, которая вообще отказывается что-либо делать. Если вы распечатываете задание на устройстве PostScript, а сбой сети приводит к тому, что команда «showpage» поступает на выходное устройство как «shopage», система с радостью выдаст сообщение об ошибке «undefined» и откажется печатать ваше задание, даже если он уже обработал всю вашу страницу, и команда ‘showpage’ просто должна сообщить устройству вывода, что оно может начать вывод вашего шедевра. В прошлом такие ошибки возникали регулярно — отсюда и длинный список сообщений об ошибках PostScript, которые можно найти на этом сайте.
  • Как и некоторые калькуляторы HP, язык PostScript использует обратную польскую запись (RPN).
  • Поскольку PostScript практически всегда используется для описания того, где что-то находится на странице, он имеет систему координат. По умолчанию его отправной точкой считается левый нижний угол страницы. Расстояния или измерения обычно выражаются в пунктах. В дюйме 72 точки. 1 точка измеряет 0,352 мм.

Вот видео Computerphile о программировании на PostScript:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *