当前位置: 首页 > >

PostScript

PostScript是一种编程语言,最适用于列印图像和文字(无论是在纸、胶片或非物质的CRT都可)。用现今的行话讲,它是页面描述语言。它既可以像程序代码一样具有可读性,又能表示出可任意放大和缩小的矢量图。

它于1985年由Adobe推出,最早在AppleLaserWriter上出现(据作者所知)。

PostScript对于印制工业产生很深远的影响,甚至到今天仍保留着当LaserWriter印表机问世时重要的地位。

为了更好理会PostScript,我们必须先了解在它出现以前市场是怎样运做的。在那时候,需要排版设备的话要找Acme Typesetters,他们会提供一套Acme系统及Acme输出设备。该Acme系统和其他生产商的设备不兼容。在多数情况下,与其他系统调换数据相当困难,几乎是不可能的。

如果拥有一台个人计算机,连接在一台只能打出低品质位图字符的点阵打印机上。打印效果已经无法满足用户的需要。

PostScript的历史由Parc开始,它是施乐的研究院,许多我们不以为意的计算机技术都是从那里开发的:几个首要的例子,如雷射印表机,图像使用者界面和以太网。

John Warnock是工作于施乐的出色的工程师之一。他开发了名为「Interpress」的语言,用于操作施乐雷射印表机。他和他的上司,Chuck Geschke,用了两年时间力图让施乐把Interpress商业化。当建议被拒绝后,他们决定离开施乐,自立门户。

John Warnock和Chuck Geschke把他们的公司取名为Adobe,位于加州的Los Altos,Warnock的家。房子后面有一条小溪,有时你能在关于Napa Valley的酒类向导图上看到,Napa Valley是出产最纯的加州酒的地方。

最初,Warnock和Geschke曾设想自行组建一台真正强大的印表机,但很快他们意识到为其他生产商提供可控制他们生产的印表机的工具更现实。

PostScript Level 1

初始时只称作PostScript。「Level 1」是为了与新近升级的Level 2区别而后加的。

PostScript是一个非常强大的语言,类似于Forth,另一种计算机语言。开始时需要一套相当强大的系统运做PostScript。事实上,在它推出的头几年中,PostScript印表机具有更强的处理能力,可以和Macintosh机连接使用。

PostScript 是相对设备独立的。也就是说PostScript文件可以在任何PostScript设备中运做。你可在雷射印表机上得到300dpi的打印效果,但同样影像在imagesetter中就可得到漂亮且清晰的2400dpi效果。对于用户来讲,他们不需要受限与一个生产商,可自由选择最适合要求的设备。

PostScript的腾飞

对Adobe来说,PostScript是一个相当大的赌注,如果没有Apple计算机的Steve Jobs,他们可能会无法向市场证实PostScript的价值和意义。

1985年,Macintosh计算机的销售量开始下降,而Apple的新机型迫切需要一个有威力的应用程式。Steve

Jobs对Adobe的技术很感兴趣,投资了Adobe 二百五十万让Warnock为Apple LaserWriter编写PostScript控制器。该印表机和HP LaserJet相似,但PostScript控制器可以使它输出「typesetter」品质。

与功能强大的雷射印表机连接的计算机并不会产生大的影响,但Apple和Adobe很幸运地在偶然机会遇到第三个合作伙伴Aldus,一个刚起步的小公司,它编写了能够充分发挥出Mac 和LaserWriter功能的应用程式,该软件就是PageMaker。

在桌上型电脑的问世后的一年内,LaserWriter,PostScript和PageMaker的结合挽救了Apple,Aldus和Adobe也由此变成了有钱的公司。Linotype是首家赏识PostScript价值的图像艺术供应商,它推出了自带专用PostScript RIP的imagesetter。其他的生产商也紧跟其后,很快地PostScript就成了印前业的国际性混合语。

PostScript Level 2

大约在1994,Adobe发行了PostScript的下个修订版本Level 2。 Level 2是个具有重大意义的升级版,也是印前业者急切期盼的版本。

最重要的功能:

增进的速度和可靠性:在Level 2出现之前,Limitcheck和Vmerror PostScript错误非常麻烦,令人头痛。Adobe优化了PostScript程式码和增强程式码的记忆管理功能。该功能提高了功效,尤其对於旋转的扫描作业。

支持分立的内置RIP:Level 2 RIPs能够接受合成的PostScript文件,自行处理分色工作。它并不是一个必须遵循的功能,不同生产商的Level 2 RIPs的功能也有不同。

RIP中解压缩影像:Level 2 RIPs能够解压缩JPEG和CCITT

支持合成字体:该功能对于亚洲国家来讲相当重要,他们的字符比欧洲使用的大。Apple通过QuickDraw

GX来支持合成字体。现今你可能只在Apple的档案储藏柜里找到,还有其他的一些技术突破如OpenDoc 和the Newton。

字体和字型的缓存:有了Level 2,令人讨厌的字体缓存删除没有了。

字型的缓存问题几年后通过一些整版应用程式如PressWise 和Preps 解决了。

改进的驱动程式:Macintosh的LaserWriter 8和Adobe的Windows 3.1系统PostScript driver 2.X为基础,联合恰当的PPD-drivers。

改进的网屏算法:对于许多的RIP生产商,当Level2推出时已是过时的新闻。比如Agfa,已在这前一年就已销售它的对称网屏技术,为胶印业提供高品质的无网屏镜像效果。Adobe版本被称为准确网屏。

Level 2的市场应用较慢

先发表Level 2规范,然后才开始研究它的实际应用,这可以说是Adobe的一大错误。更为难堪的是,竞争者们推出Level 2的竞争产品的速度比Adobe想像的更快。

虽然PostScript Level 2具有明显的优点,但却花费了很长时间才真正开始应用新功能。例如在Level 2推出的6年后,XPress4.11还不能很好地支持分立内置RIP功能。

PostScript 3

由于一些不明确的原因,Adobe把最新升级版本取名为PostScript 3,而不是PostScript Level 3。和Level 2相比,3升级的意义并不大。这是可以理解的,因为当时许多应用程式还正在如何正确支持好Level 2的困惑中。

PostScript 3的主要优点:

每种颜色支持超过256个灰阶。Adobe在PostScript程式码中包含了12-bit的网屏。可支持每种颜色多达4096个。在过去,256灰阶的极限有时可看到条纹状,尤其是混合色。

支持PDF:PostScript 3 RIPs可支持PostScript Level 2和PDF文件。

改进的分立内置RIP支持功能:PostScript Level 2

RIP本身已经能够完成分色作业,但对于某些类型的影像如双网屏和多彩印影像就不能处理。PostScript 3含有名为Device N的色域。如果非CMKY色彩影像解译成该色域内,PostScript 3 RIP能正确地对影像进行分色。

网络打印:在如今网络发烧的时代,Adobe也不甘落后,在PostScript增添了网络功能。有趣的是没有Adobe的OEM用户想尝试该功能。

PS的最大特点是避免了版面制作对使用设备的依赖性,只要符合PS这个标准的数据格式,不管是用MAC微机编辑也好,还是用SUN工作站进行编辑也好,都可以通过打印驱动程序获得共同的PS编码文件;

PS的另一特点是能够综合处理文字和图像,在一页印刷品中,PS将其中的所有信息都用一种计算机数据来表现和描述,为图文合一的版面处理提供了可能;

有了这种页面数据格式,不同生产厂家的通用计算机之间和各种专用计算机系统(设计用,文字处理用,图像制版用等)之间,才可能进行数字化数据的交换,它是印前处理系统开放化的基础之一。

PostScript的主要用意是为以相对设备独立的方式描述影像提供一种方便的语言。该设备相对独立是指不以某种特定设备特性作参照,来描述影像(比如印表机的解析度),这样同一种描述不需修改就可适用于任何一种PostScript印表机(比如,LaserWriter 或Linotron)。实际情况下,有些PostScript文件对于目标设备做假设定(比如它的解析度或纸匣的数量),但这并不实用,而且局限了可转移性。

对于语言本身,通常是解译的,如RPN计算器一样的存储方式。程序把运算的参数存储在一起,然后调用该操作。通常情况下,运算后将结果留在存储显示上。例如,我们将12乘以134。我们会使用以下PostScript程式码:12 134 mul前面的两个字「12」和「134」将12和134存储显示。「mul」激活相乘运算,将两个数值相乘,并将结果推倒存储显示上。结果数值将保留在那里供以后程序中其它运算时使用。

根据手册中Adobe使用的规定,作者用以下两个主题概括运算:参数-1 参数-2。此概念是指使用运算时要推出参数-1 参数-2等后方可激活运算。运算后将显示结果。许多运算返回后无结果(因副作用);返回后显示「-」。

Postscript语言  以空格,换行符或水平制表符作为基本分割符,以百分号("%")为注释开始的标志,每行注释在遇到换行符结束,所有的字符都用ansi编码。如果想体验一下postscript神奇的画图,最简单的方法是用记事本编辑一段postscript代码,保存的时候注意要用ansi编码,把扩展名改为.eps,用GSView或者SumatraPDF打开,就可以看到对应画出的图形。如果使用Notepad++,可以设置Post Script的语法提示。

基本画图命令

Post Script采用操作数在前,操作符在后的结构。因为这样相当于对操作符的后续编历,大大减少语法解析的难度。操作数按顺序压栈,操作符则从栈顶取出对应数量的操作数进行操作。Post Script采用的坐标系以左下角为原点,水平向右为x轴正方向,水平向左为y轴正方向。pt是Post Script里的基本长度单位,1英寸为72pt,相当于屏幕的96个像素。因此,可以认为3个pt和4个像素大小相当。

Post Script用setlinewidth设置线宽,用setrgbcolor设置颜色,例如:

3 setlinewidth %设置线宽为3pt

0.5 0.5 0.5 %设置颜色为50%灰色

如果不设置,线宽默认为1,颜色默认为黑色。

Post Script画线是用行走的图龟描述。主要命令有:

x y moveto %图龟移到点(x, y)

x y lineto %图龟由所在点构造线段路径到点(x, y)

x, y, r, arc1, arc2 %构造以(x, y)为圆心,以r为半径,半径辐角从arc1到辐角arc2的圆弧路径

x1, y1, x2, y2, x3, y3 curve %以图龟当前位置, (x1, y1), (x2, y2), (x3, y3)四点为控制点构造三次Bezier曲线路径

stroke %用当前的线宽和颜色

num setlinewidth %设置画线宽度为num

例如画一条从左下角出发,以4:3为坡度,长度为100的斜线,可以用下面的命令:

0 0 moveto 80 60 lineto stroke

也可以写为

80 60 0 0 moveto lineto stroke

其中第二种写法的语法解析是这样的,四个数字80, 60, 0, 0依次入栈,当执行到命令moveto时,该命令有两个参数,因此从栈顶取出两个参数0, 0,并执行移到这一点的命令。再执行命令lineto时,该命令也有两个参数,再从栈顶取出两个参数80 60,并执行向这一点画线的命令。虽然与第一种写法入栈和出栈的顺序不同,但执行结果是一样的。

Post Script的线的末端形状和连接点形状分别用setlinecap和setlinejoin设置,如果参数为2,即为圆形末端和连接,默认值为1,即矩形末端和连接。

Post Script可以用fill命令以当前颜色填充闭合路径。闭合路径由newpath和closepath设置。例如以25%灰度填充宽为100,高为50的矩形,可以用下面的命令:

newpath

0 0 moveto

100 0 lineto

100 50 lineto

0 50 lineto

closepath

0.75 0.75 0.75 setrgbcolor

fill

PostScript通常情况下默认的页面大小是A4大小,如果要改变页面大小,通常用PageSize语句。例如,如果要把页面设置为宽400pt,高300pt,可以使用下面的命令:

<</PageSize [400 300]>> setpagedevice

双书名号<<>>定义结构体。这里的双书名号是英文的大于号和小于号的双写,而不是中文的书名号。

右图是用PostScript画半球的例子,其中半球的椭圆边是用三次Bezier样条近似画出的。对应的代码如下:

1 setlinecap1 setlinejoin

25 50 moveto

25 50 25 36.25 70 25 125 25 curveto

125 25 180 25 225 36.25 225 50 curveto

0.5 0.5 0.5 setrgbcolor3 setlinewidthstroke

newpath

25 50 moveto

25 50 25 36.25 70 25 125 25 curveto

125 25 180 25 225 36.25 225 50 curveto

125 50 100 0 180 arc

closepath

0.875 0.875 1.0 setrgbcolorfill

坐标变换命令

Post Script支持坐标平移,旋转,缩放变换。在变换之前,一般是先用gsave保存当前的坐标系,画完在变换下的图形后,再用grestore恢复当前坐标系。变换函数有下面几种:

x y translate %后面所画的图形都向右平移xpt,向上平移ypt

angle rotate %后面所画的图形都以(0, 0)点为轴心逆时针旋转角度angle

s1 s2 scale %后面所画的图形都在x方向上变为原来的s1倍,在y方向上变为原来的s2倍

[a b c d e f] concat %后面所画的图形上的点都以下面的变换的值确定新位置:

在Post Script中,方括号表示数组,矩阵用6个元素的数组表示。需要注意的是,在伸缩变换中,线宽也会做相应的变换。因而如果要画椭圆弧,利用圆弧仿射变换不如用三次Bezier样条画得线条粗细均匀。

利用translate平移变换设置位置可以把多个PostScript图片拼成一张子图,也为图的合并带来方便。

num scalefont %设置字体大小

setfont %选中刚刚设置的字体

show %显示字体。

例如,在画图区的左右角用16号字Times new roman显示字符串"Post Script"可以表达为:

/Times findfont 16 scalefont setfont 0 8 moveto (Post Script) show

在圆括号里的字符串由可打印字符(ascii码值为32-126,包括空格,数字,大小写字母,标点符号和部分运算符)和一部分不可打印字母组成。可打印字符直接把字符放在括号中即可,不可打印字符则由反斜杠加3位8进制数表示,例如“£”可以表示为(/244)。字符表放在这一部分的图中。其中每三列为一个模块。每个模块中,第1列为8进制数,第2列为Times字体对应的符号,第3列为Symbol。

颜色渐变

在Postscript语言里,颜色渐变用填充模板(Shading Pattern)实现。颜色渐变填充模板有很多种。其中三角形网格是最简单的,也是用起来最方便的。Shading Pattern用双书名号(<<>>)建立结构体。定义宏替换可以使用反斜杠加宏名最后以def结束。例如要画一条竖直的彩虹颜色条,可以这样定义竖直颜色填充模板:

/VerticalColorBar

<<

/PatternType 2

/Shading

<<

/ShadingType 5

/ColorSpace /DeviceRGB

/VerticesPerRow 2

/DataSource

[

0 80.5 0 0

1 80.5 0 0

0 71 0 0

1 71 0 0

0 51 1 0

1 51 1 0

0 30 1 1

1 30 1 1

0 10 0 1

1 10 0 1

0 00 0 0.5

1 00 0 0.5

]

>>

>>def

其中VerticalColorBar是宏名,前面加反斜杠表示这是个宏定义,后面用def表示宏定义结束。下面用这个宏定义画一个竖直矩形:

newpath

10 10 moveto

60 10 lineto

60 410 lineto

10 410 lineto

closepath

VerticalColorBar [10 0 0 50 10 10] makepattern setpattern

fill

需要注意的是,在makepattern前面要有个矩阵,因为前面定义的填充模板不一定正好在所要填充的模板上。即使所定义的填充模板与所要填充的区域正好重合,还是需要在makepattern前加一个单位矩阵,因为这是makepattern必须有的参数。通过矩阵,还可以实现对填充模板的变换。例如,想要把前面的模板做成一行彩色字的填充,可以使用下面的代码

/Times findfont 32 scalefont setfont

0 16 moveto

VerticalColorBar [0 48 -24 0 192 0] makepattern setpattern

(Hello World!) show

上面的代码相当于把定义的填充模板逆时针旋转了90度,因此可以看出把“上红下蓝”的填充模板变成了“左红右蓝”的字体填充。

Post Script非常适合制作学术论文插图,因为在很多顶尖学术期刊要求示意图必须为矢量图,而Latex支持的矢量图一般都是eps格式的矢量图。Adobe公司的illustrator和免费软件Inkscape都支持eps格式矢量图的编辑。公式编辑器MathType,几何作图软件Geogebra,还有强大的科学计算软件Matlab都支持保存为eps格式矢量图。因此,如果学会了Post Script语言,可以在它们输出的矢量图的基础上加以修改,从而得到更适应论文的插图,对于写出高质量的学术论文有重要意义。

学习PostScript语言推荐的书为Adobe公司发布的Post Script Language Reference Third Edition,这本书可以在公司官网免费下载电子版  。



友情链接: bgkz 土豆网名 开心小聚 疯狂踏板网 八仙饭店 女王芦荟 高粱标志 王牌游戏 苹果狂魔网 落伍果盘