星期六, 一月 01, 2005

postscript 笔记

postscript是一种标记语言, 最初有adobe公司开发并免费发布, 用于打印. 后来成为工业标准. 由于ps文件的应用广泛, 也有模拟打印机(如ghostview)在电脑上显示这些文件的软件面试. 由于是矢量存储, 文件的清晰度不随放大或缩小而有所下降, 所以是一种精确格式. postscript的语言是堆栈式的(先进后出), 这个应该是打印机的微处理器有关, 所以它的语言看起来有点儿倒装的感觉.


ps文件一般都是由其他软件生成, 如metapost, gnuplot, gimp等等, 为什么要学postscript语法?

第一, 虽然一般是由其他软件生成, 但我们也完全可以自己写, 而且自己写的一般比程序生成的简短, 易读, 效率高;
第二, 目前还没有可视化的编辑ps文件的工具, 如果想改动一下图中的某些部分的话怎么办? 借助其他图形编辑工具如display是可以达到所见即所得的效果, 但是display编辑过程中并不是矢量格式, 图片被整大, 质量被弄模糊. 所以最好的办法是懂了ps的语言, 自己动手修改文件.


gs(gostscript)
是用于解释ps命令的, 可以在终端运行, 一句一句解释并显示在图上. 本来PostCript是为打印机准备的啦, gs就是模拟一下打印机, 在屏幕上显示了.


ps实战

1. 一个最简单的ps图:
%!
newpath
100 100 moveto
200 300 lineto
stroke
将上面的文字存起来, 叫个simple.ps吧, 然后用gv啊什么的打开就可以看到一条线了!
解释一下这几个字的意思:
%! 是告诉别的程序说这个文件是ps文件, 要是用file命令就可以看到:"simple.ps: PostScript document text", 如果不要这两个字母也没问题, 在postscript语言中%表示说明;
newpath: 重新定路径, 有点初始化的意思, 把以前的path清空, 第一次不写它也行;
100 100 moveto: 就是移动到以象素为坐标的(100, 100)处, 可以想象成移动打印机的激光头;
200 300 lineto: 划一条线(当然是从刚才移动到的地方啦)到(200, 300)的地方;
stroke: over, 显示吧, 这个不能省.

2. 一个写文字的例子
/Times-Roman findfont
12 scalefont
setfont
newpath
100 200 moveto
(Example) show
showpage
都很直观, findfont: 找到并用这个字体(只要机器里有的字体都可以), scalefont: 字体大小, show: 显示()中的字, showpage: 显示该页, 以后的就在下一页了.

如果想写些希腊字母, 可以这样
/Symbol findfont 600 scalefont setfont
6000 1000 M (n) show
showpage

3. 画一条虚线
newpath
100 100 moveto
200 400 lineto
[3] 0 setdash
stroke
其中[3]中的3是dash的长度, 有时侯由于scale的原因, 要很大如100才看得出来. 后面的0是虚线的样式, 可以自己试, 该选哪一种.
[] 0 setdash 表示实线.


哈哈, 成功hack ps图一张(上面是修改后的, 下面是原来的):
GRB050904
原文件在这里, 改过之后的文件在这里! 呵呵, 实际上就是删掉一些.
2005. 10. 6
现在被改成这个样子了:)
GRB050904-X-afterglow-hack1.png
ps文件.
2005.10.16


PostScript参考:
书有: PostScript language reference, 3nd edition, Adobe出品, 权威, 详尽, 有900多页啊;
POSTSCRIPT LANGUAGE TUTORIAL and COOKBOOK, ADOBE SYSTEMS INCORPORATED

网页有:
PostScript Tutorial 一个很简略易懂的介绍, 适合初学;
PostScript Program I(我 自己翻译的哦), II, III 比较技术性, 不过I也是很粗浅的.


appendix:

没有评论: