我想将JPEG嵌入到postscript文件中。有没有办法像嵌入PS文件那样直接嵌入它?
72 300 translate
(incuse.eps) run
我终于能够在ghostscript中使用此代码显示图像。
newpath
25 725 moveto
0 90 rlineto
120 0 rlineto
0 -90 rlineto
-120 0 rlineto
closepath
0 0 0 setrgbcolor
1 setlinewidth
stroke
gsave
25 700 translate
175 175 scale
800
808
8
[800 0 0 -808 0 0]
(ADSM_Logo.jpg) (r) file /DCTDecode filter
false
3
colorimage
grestore
showpage
但打印PS文件时出错。
错误名称:/ undefined违规命令: - file--操作数堆栈:
(R)
(ADSM_Logo.jpg)
[800 0 0 -808 0 0]
8
808
800
Square已成功绘制,但图像无法显示。
答案 0 :(得分:3)
PostScript可以处理DCT,所以是的。您需要使用DCTDecode过滤器来解压缩图像DataSource。
查看Ghostscript的lib文件夹中的viewjpeg.ps以获取完整的程序,但这是基础知识:
% prepare image dictionary
<< /ImageType 1
/Width width
/Height height
/ImageMatrix [ width 0 0 height neg 0 height ]
/BitsPerComponent 8
% If 4-component (CMYK), assume data is inverted per Adobe Photoshop
colors 4 eq {
/Decode [ colors { 1 0 } repeat ]
} {
/Decode [ colors { 0 1 } repeat ]
} ifelse
/DataSource F /DCTDecode filter
>> image
<强>更新强>
您正在使用&#39;文件&#39;操作员从磁盘读取文件,可能是因为您没有将此文件存储在打印机的硬盘上(如果有的话),所以不出所料,它不起作用。
错误甚至是这样说的(或多或少)&#39; undefined&#39; &#39;违规命令文件&#39;并且在操作数堆栈的顶部是&#39;(ADSM_Logo.jpg)(r)&#39;
假设您的打印机上没有硬盘,您需要将JPEG数据放入PostScript程序,并使用当前文件作为数据源,当然还有DCTDecode过滤器。您将需要学习如何使用图像运算符而不是colorimage,最好也使用运算符的字典形式。
答案 1 :(得分:0)
您在评论中提及&#34;我将图像存储到打印机的硬盘中。&#34;但似乎postscript解释器无法访问它,或使用不同的路径,甚至不同的路径命名约定。如果从同一目录启动,则使用裸文件名将与ghostscript或ghostview一起使用,因此正在运行的程序具有用于当前工作目录的环境变量CWD。顺便说一下,它似乎是一个克隆解释器,因为它抛出/ undefined而不是/ undefinedfilename。
从postscript程序访问打印机的磁盘将是非常特定于产品的。
但Ken描述的方法将绕过任何这些问题。
使用currentfile
作为数据源意味着image
运算符将直接从postscript程序文件中读取数据。因此,您需要将数据直接嵌入到程序源代码文本中。您可以使用文本编辑器读入文件,也可以使用包含功能的某种宏处理器。
更简单的方法是使用ghostscript生成可打印文件。 ps2pdf
或ps2ps
(可能使用-DNOSAFER)将处理该程序并提取输出。