PostScript

PostScript

PostScript(PS)是主要用于電子產業和桌面出版領域的一種頁面描述語言和程式語言

  • 中文名稱
    PostScript
  • 外文名稱
    PostScript
  • 類別
    編輯語言
  • 時間
    1985年

發展歷程

它于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樣條近似畫出的。對應的代碼如下:

<</PageSize[250 175]>>setpagedevice

PostScript

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 %後面所畫的圖形上的點都以下面的變換的值確定新位置:

PostScript

在Post Script中,方括弧表示數組,矩陣用6個元素的數組表示。需要註意的是,在伸縮變換中,線寬也會做相應的變換。因而如果要畫橢圓弧,利用圓弧仿射變換不如用三次Bezier樣條畫得線條粗細均勻。

利用translate平移變換設定位置可以把多個PostScript圖片拼成一張子圖,也為圖的合並帶來方便。

顯示字型

Post Script支持英文字母,希臘字母和數學公式。所有數學公式的符號都是由ascii碼表示。Post Script的字元串要放在圓括弧裏。設定字型的命令是findfont,前面的參數為/Times(用來顯示TimeNewRoman英文字型)或者/Symbol(用來顯示希臘字母)。其它重要命令有

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表示宏定義結束。下面用這個宏定義畫一個豎直矩形:

PostScript

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必須有的參數。通過矩陣,還可以實現對填充模板的變換。例如,想要把前面的模板做成一行彩色字的填充,可以使用下面的代碼

PostScript

/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,這本書可以在公司官網免費下載電子版。

相關詞條

相關搜尋

其它詞條