2014-08-29 94 views
1

我想將JPEG嵌入到postscript文件中。有沒有什麼方法可以像嵌入PS文件一樣直接嵌入它?如何將JPEG圖像嵌入到postscript文件中?

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文件時出錯。

錯誤名稱:/未定義出錯的命令:--file--操作數堆棧:

(R)

(ADSM_Logo.jpg)

[800 0 0 -808 0 0 ]

廣場得到成功繪製,但圖像不出現。

+0

我的建議看看任何各種jpg到eps轉換器。根據您的最終目標,您可以使用轉換器並將eps粘貼到您的文件中,或研究輸出以瞭解如何推出自己的。 – agentp 2014-09-03 16:17:36

回答

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 

更新

您使用的是「文件」操作符讀取文件從磁盤,大概你沒有存儲在你的打印機的硬盤上的文件(如果它甚至有),所以毫不奇怪,它不工作。

即使是這麼說的(或多或少)「未定義」「問題的命令文件中的錯誤」,並在操作數堆棧的頂部是「(ADSM_Logo.jpg)(R)」

假設你沒有在打印機上有硬盤,您需要將JPEG數據放入PostScript程序中,並使用currentfile作爲數據源,並使用DCTDecode過濾器。您將需要學習如何使用圖像操作符而不是colorimage,並且最好使用操作符的字典形式。

+0

我能夠使用ghostview顯示圖片。但是當我嘗試在打印機上打印時,出現錯誤。請參閱我的更新。 – user3814700 2014-08-29 09:45:40

+0

我將圖像存儲在打印機的硬盤上。我甚至可以單獨打印圖像。它與ps文件位於同一位置。我怎樣才能把JPEG文件放入PostScript中? – user3814700 2014-08-30 01:56:45

+1

複製並粘貼?如果你想這樣做,你將不得不學習一些PostScript編程,你應該掌握PostScript語言參考手冊並查看它。藍色和綠色書籍也很有用(例子和食譜)。或者就像下面的lusre droog所說的那樣,使用Ghostscript爲你製作一個PostScript文件。 – KenS 2014-08-30 08:55:28

0

您在評論中提到「我將圖像存儲到打印機的硬盤上。」但是看起來postscript解釋器不能訪問它,或者使用不同的路徑,甚至不同的路徑命名約定。如果從同一目錄啓動,使用裸文件名將與ghostscript或ghostview一起工作,因此正在運行的程序對當前工作目錄具有環境變量CWD。順便說一句,它似乎是一個克隆解釋器,因爲它會拋出/ undefined而不是/ undefinedfilename。

從postscript程序訪問打印機的磁盤將是非常產品特定的。

但肯方法描述的方法將繞過任何這些問題。

使用currentfile作爲數據源意味着image運算符將直接從postscript程序文件中讀取數據。所以你需要將數據直接嵌入到程序源代碼文本中。您可以使用文本編輯器來讀入文件,也可以使用某種包含功能的宏處理器。


更簡單的方法是使用ghostscript生成可打印的文件。 ps2pdfps2ps(可能帶有-DNOSAFER)將處理程序並提取的輸出。

+0

如何將數據直接嵌入到程序源代碼文本中?你能向我提供說明嗎?我在網上找不到教程 – user3814700 2014-08-30 07:44:12

+0

用vi,你打開一個空行,然後用':r filename'來替換當前行與文件的內容。你需要一個全功能的「程序員文本編輯器」。一個簡單的文本編輯器可能沒有文件包含功能。 – 2014-08-30 08:08:22

+0

@ user3814700我更新了更簡單的想法。由於ghostscript可以運行它,讓ghostscript成爲你的「宏處理器」。 :P – 2014-08-30 08:14:54