我遇到了一些麻烦,当我尝试在pdf中插入图像时,同时更改其色彩空间。现在我有一个png单色图像(8位,1位深),其中1是黑色的,0是透明的(有点像蒙版)。我想将此图像插入到pdf文件中,并将色彩空间更改为分色,因为它需要使用专色打印。有什么方法可以做到这一点吗?
目前,我尝试了以下方法:
<</Type /XObject
/Subtype /Image
/Width 800
/Height 600
/ColorSpace <</CS0 6 0 R>>
/BitsPerComponent 1
/Filter /FlateDecode
/DecodeParms <</Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 800>>这就是分离色彩空间:
6 0 obj
[/Separation /White 10 0 R
<<
/FunctionType 2
/N 1
/Range [0 1 0 1 0 1 0 1]
/C1 [1 0 0 0]
/Domain [0 1]
/C0 [0 0 0 0]我还尝试添加内联的colorspace定义,但不起作用。
发布于 2018-06-28 01:29:36
你们已经很接近了。您错过了将其视为透明的image属性,并且您使分色空间的备用空间比所需的更复杂。我希望你写的东西(如果编码正确)能以青色和白色显示图形,并覆盖任何底层材料。
向图像添加一个Mask属性,说明要对0到0之间的所有值进行掩码。这将使零位变得透明。
我不会使用白色作为分色名称,因为它可能会导致混淆,除非您真的将1位绘制为白色,而将0位保留为未绘制。这将是不寻常的,但我可以看到它的发生。除非你想要绘制的颜色不能用灰度表示,否则我会使用设备灰色这一非常简单的替代颜色。您说图像是黑色和透明的,所以使用DeviceGray将是一个很好的选择。
从分色(0表示未绘制,1表示黑色)转换到交替颜色空间( DeviceGray )与将1的值Input转换为DeviceGray 0,将input 0转换为DeviceGray 1一样简单。因此,编写postscript函数是最快的。{1 sub}就足够了。
<</Type /XObject
/Subtype /Image
/Width 800
/Height 600
/ColorSpace <<6 0 R>>
/BitsPerComponent 1
/Mask [0 0]
/Filter /FlateDecode
/DecodeParms <</Predictor 15 /Colors 1 /BitsPerComponent 1 /Columns 800>>
stream
………
endstream
endobj
6 0 obj
[/Separation /White /DeviceGray 7 0 R]
endobj
7 0 0bj
<<
/FunctionType 4
/Range [0 1]
/Domain [0 1]
/length 7
>>
Stream
{1 sub}
endstream
endobjhttps://stackoverflow.com/questions/51021506
复制相似问题