过去我使用Ghostscript中包含的 "viewjpeg.ps "PostScript程序将JPEG图像放置到生成的PDF中,取得了良好的效果。现在我试图对位图做同样的处理,但我一直无法使其工作。我的直觉是,我需要的程序是 "viewraw.ps "或 "viewrgb.ps",而且我可以看到,预期的参数将与传递给 "viewjpeg.ps "的参数有些不同。
到目前为止,我的情况是这样的。
"C:\\Program Files\gs\gs9.10\bin\gswin64c.exe" -q -sDEVICE=pdfwrite -DNOSAFER -r200x200 -sOutputFile=o.pdf z:\home\dell\reporting\viewrgb.ps -c "(out002.bmp) 6800 viewrgb"
这非常接近我想要的东西,但是我的位图(虽然可以清楚地识别)在输出的PDF中被扰乱了:垂直压缩、上下颠倒,而且颜色有些错误。
我试图通过调整 "宽度 "参数(6800以上)来解决这些问题。我的位图是1700像素宽,每个像素使用4个字节,所以1700*4=6800似乎是一个合理的选择。我也试过1,700(像素宽度)和54,400(每行图像的位数)。5,100 (3 * 1,700)似乎效果最好,但它仍然是错误的。
请注意,"viewjpeg.ps "并不期望有 "宽度 "参数,所以我以前没有处理过这个问题。(在检查 "viewrgb.ps "时,我才意识到需要这个参数)。
有谁能发现我的错误,或者给我指出一个使用 "viewraw.ps "或 "viewrgb.ps "的例子?
你还没有说(或者我错过了)你的 "位图 "是什么格式,你也没有提供一个例子让我看,所以我无法判断(或者实验)。
你说你的输出是每个像素4个字节,所以要么是CMYK,要么是类似RGBa的东西。无论哪种方式,viewrgb都不会工作,因为它只需要3个通道。它的目的是查看Ghostscript bitrgb设备的输出。
Viewraw只是读取原始数据,直接的图像样本,没有头,IIRC和它的 CMYK所以除非你的4个字节是CMYK,否则它也不会正确。
由于这两个程序都是RAW格式,它们不需要头,如果你的图像格式包括头,那么这将被视为图像数据,这肯定会导致图像被错误地绘制。
如果你错误地调用了这两个PostScript程序,它们都会在后道上显示一个使用信息。
在Ghostscript (9.10)这样的老版本中,你不需要使用-dNOSAFER。
-r对pdfwrite影响不大,而且当你给它输入图像时,它也不会有任何影响,你应该省略它。