複製鏈接
請複製以下鏈接發送給好友

PostScript

鎖定
PostScript是一種編程語言,最適用於列印圖像和文字(無論是在紙、膠片或非物質的CRT都可)。用現今的行話講,它是頁面描述語言。它既可以像程序代碼一樣具有可讀性,又能表示出可任意放大和縮小的矢量圖。
中文名
PostScript
外文名
PostScript
推    出
Adobe
出    現
Apple LaserWriter
適    用
列印圖像和文字
應    用
製作學術論文插圖

PostScript發展歷程

它於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用户想嘗試該功能。

PostScript特點介紹

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語法和命令

Postscript語言 [1]  以空格,換行符或水平製表符作為基本分割符,以百分號("%")為註釋開始的標誌,每行註釋在遇到換行符結束,所有的字符都用ansi編碼。如果想體驗一下postscript神奇的畫圖,最簡單的方法是用記事本編輯一段PostScript代碼,保存的時候注意要用ANSI編碼,把擴展名改為.eps,用GSView或者SumatraPDF打開,就可以看到對應畫出的圖形。如果使用Notepad++,可以設置PostScript的語法提示。
基本畫圖命令
PostScript採用操作數在前,操作符在後的結構。因為這樣相當於對操作符的後續編歷,大大減少語法解析的難度。操作數按順序壓棧,操作符則從棧頂取出對應數量的操作數進行操作。PostScript採用的座標系以左下角為原點,水平向右為x軸正方向,水平向左為y軸正方向。pt是PostScript裏的基本長度單位,1英寸為72pt,相當於屏幕的96個像素。因此,可以認為3個pt和4個像素大小相當。
PostScript用setlinewidth設置線寬,用setrgbcolor設置顏色,例如:
3 setlinewidth %設置線寬為3pt
0.5 0.5 0.5 %設置顏色為50%灰色
如果不設置,線寬默認為1,顏色默認為黑色。
PostScript畫線是用行走的圖龜描述。主要命令有:
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,並執行向這一點畫線的命令。雖然與第一種寫法入棧和出棧的順序不同,但執行結果是一樣的。
PostScript的線的末端形狀和連接點形狀分別用setlinecap和setlinejoin設置,如果參數為2,即為圓形末端和連接,默認值為1,即矩形末端和連接。
PostScript可以用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,可以使用下面的命令:
<> setpagedevice
雙書名號<<>>定義結構體。這裏的雙書名號是英文的大於號和小於號的雙寫,而不是中文的書名號。
圖1是用PostScript畫半球的例子,其中半球的橢圓邊是用三次Bezier樣條近似畫出的。對應的代碼如下:
圖1 圖1
<>setpagedevice
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圖片拼成一張子圖,也為圖的合併帶來方便。

PostScript顯示字體

PostScript支持英文字母,希臘字母和數學公式。所有數學公式的符號都是由ascii碼錶示。PostScript的字符串要放在圓括號裏。設置字體的命令是findfont,前面的參數為/Times(用來顯示Time New Roman英文字體)或者/Symbol(用來顯示希臘字母)。其他重要命令有
num scalefont %設置字體大小
setfont %選中剛剛設置的字體
show %顯示字體。
例如,在畫圖區的左右角用16號字Times New Roman顯示字符串"PostScript"可以表達為:
/Times findfont 16 scalefont setfont 0 8 moveto (PostScript) 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度,因此可以看出把“上紅下藍”的填充模板變成了“左紅右藍”的字體填充。

PostScript應用和學習

PostScript非常適合製作學術論文插圖,因為在很多頂尖學術期刊要求示意圖必須為矢量圖,而LaTeX支持的矢量圖一般都是eps格式的矢量圖。Adobe公司的illustrator和免費軟件Inkscape都支持eps格式矢量圖的編輯。公式編輯器MathType,幾何作圖軟件GeoGebra,還有強大的科學計算軟件MATLAB都支持保存為eps格式矢量圖。因此,如果學會了PostScript語言,可以在它們輸出的矢量圖的基礎上加以修改,從而得到更適應論文的插圖,對於寫出高質量的學術論文有重要意義。
學習PostScript語言推薦的書為Adobe公司發佈的PostScript Language Reference Third Edition,這本書可以在公司官網免費下載電子版 [2] 
參考資料