2

我在尝试在 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]

我还尝试添加内联的色彩空间定义,但没有奏效。

4

1 回答 1

0

你已经很接近了。您错过了将告诉它将零视为透明的图像属性,并且您使分离颜色空间的备用空间比所需的更复杂。我本来希望你写的(如果编码正确的话)以青色和白色显示图形并覆盖任何底层材料。

给图像添加一个 Mask 属性,表示 0 到 0 之间的所有值都将被屏蔽。这将使零位透明。

我不会使用白色作为分离色名称,因为它会导致混淆,除非您真的将 1 位绘制为白色,而将 0 位未绘制。这将是不寻常的,但我可以看到它正在发生。除非您要绘制的颜色不能用灰度表示,否则我会使用非常简单的设备灰色替代颜色。您说图像是黑色透明的,因此使用 DeviceGray 将是一个不错的选择。

从分色(0 为未绘制,1 为黑色)转换为备用颜色空间(DeviceGray)就像将 Input 的值 1 取反一样简单,它变成了 DeviceGray 0,输入 0 变成了 DeviceGray 1。所以后记函数是最快的写。{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
endobj
于 2018-06-27T17:29:35.930 回答