如何在postscript文件中嵌入JPEG图像?

时间:2014-08-29 05:59:52

标签: postscript eps

我想将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已成功绘制,但图像无法显示。

2 个答案:

答案 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生成可打印文件。 ps2pdfps2ps(可能使用-DNOSAFER)将处理该程序并提取输出。