【问题标题】:How to embed JPEG image in a postscript file?如何在 postscript 文件中嵌入 JPEG 图像?
【发布时间】:2017-11-23 00:31:11
【问题描述】:

我想将 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 绘制成功,但图像未出现。

【问题讨论】:

  • 我的建议是看看各种 jpg 到 eps 转换器中的任何一个。根据您的最终目标,可以使用转换器并将 eps 粘贴到您的文件中,或者研究输出以了解如何自己滚动。

标签: postscript eps


【解决方案1】:

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

更新

您正在使用“文件”运算符从磁盘读取文件,可能您还没有将该文件存储在打印机的硬盘上(如果有的话),所以不出所料,它不起作用。

错误甚至说(或多或少)“未定义”“违规命令文件”,并且在操作数堆栈的顶部是“(ADSM_Logo.jpg)(r)”

假设您的打印机上没有硬盘,您需要将 JPEG 数据放入 PostScript 程序并使用 currentfile 作为数据源,当然还有 DCTDecode 过滤器。您将需要学习如何使用 image 运算符而不是 colorimage,并且最好也使用运算符的字典形式。

【讨论】:

  • 我能够使用 ghostview 显示图片。但是当我试图在打印机上打印它时,我得到了一个错误。请查看我的更新。
  • 我将图像存储到打印机的硬盘上。我什至可以单独打印图像。它与 ps 文件位于同一位置。如何将 JPEG 文件放入 PostScript?
  • 复制粘贴?如果你想这样做,你将不得不学习一些 PostScript 编程,你应该掌握 PostScript 语言参考手册并查看它。蓝色和绿色书籍也很有用(示例和食谱)。或者按照下面的 lusre droog 说的做,使用 Ghostscript 为你制作一个 PostScript 文件。
【解决方案2】:

您在 cmets 中提到“我将图像存储到打印机的硬盘上。”但似乎 postscript 解释器无法访问它,或者使用不同的路径,甚至是不同的路径命名约定。如果从同一目录启动,使用裸文件名将与 ghostscript 或 ghostview 一起使用,因此正在运行的程序具有当前工作目录的环境变量 CWD。顺便说一句,它似乎是一个克隆解释器,因为它抛出 /undefined 而不是 /undefinedfilename。

从 postscript 程序访问打印机磁盘将是非常特定于产品的。

但肯描述的方法将绕过任何这些问题。

使用currentfile 作为数据源意味着image 操作符将直接从postscript 程序文件中读取数据。所以需要将数据直接嵌入到程序源代码文本中。您可以使用文本编辑器读入文件,也可以使用某种具有包含功能的宏处理器。


更简单的方法是使用 ghostscript 生成可打印文件。 ps2pdfps2ps(可能带有 -DNOSAFER)将处理程序并提取输出。

【讨论】:

  • 如何将数据直接嵌入到程序源代码文本中?你能给我指示吗?我在网上找不到教程
  • 用 vi 打开一个空行,然后:r filename 用文件的内容替换当前行。您将需要一个功能齐全的“程序员的文本编辑器”。一个简单的文本编辑器可能没有文件包含功能。
  • @user3814700 我更新了更简单的想法。由于 ghostscript 可以运行它,所以让 ghostscript 成为您的“宏处理器”。 :P
猜你喜欢
  • 2010-09-09
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2021-08-06
相关资源
最近更新 更多