如何在PDF中设置填充透明度

3
这是一个红色的盒子:
162 86 m 162 286 l 362 286 l 362 86 l h
1 0 0 rg f

我该如何为其添加部分透明度?

我已经阅读了PDF规范中的透明度部分,但我似乎只能找到模型和公式,而不是实际添加填充透明度的方法。

1个回答

7
正如OP所指出的,PDF规范中有一个关于“透明度”主题的整个章节。这是因为有多种应用透明度的方式。对于OP的上下文来说,最合适的方式在以下章节中解释: 11.6.4.4常量形状和不透明度 在图形状态(参见“图形状态”)中,“当前alpha常量”参数应该是两个标量值——一个用于描边,一个用于所有其他绘画操作——用于颜色合成公式中的常量形状(f_k)或常量不透明度(q_k)组件。
注意:1 此参数类似于绘制基本对象时使用的当前颜色。
在将透明组的结果绘制到其背景上时,也应用非描边alpha常量。
描边和非描边alpha常量应分别由图形状态参数字典中的CA和ca条目设置(参见“图形状态参数字典”)。如前所述的软蒙版一样,图形状态中的alpha源标志将决定alpha常量是解释为形状值(true)还是不透明度值(false)。
因此,您首先必须在页面资源中定义一个适当的图形状态参数字典,例如:
/Resources<</ExtGState<<
  /GS1 <</ca 0.5>>
>>>>

现在您可以在内容流中使用这些命名的图形状态参数:
/GS1 gs
1 0 0 rg
162 86 m
162 286 l
362 286 l
362 86 l
h
f 

如果在绿色的格子上绘制,结果看起来像这样:

透明红色矩形在绿色格子上

顺便提一下,原始内容片段中有一个错误。
162 86 m 162 286 l 362 286 l 362 86 l h
1 0 0 rg f

这里的颜色设置操作位于路径定义(162 ... l h)和路径填充操作(f)之间。这是无效的,请参考规范中的图形对象第9页,在路径构建之后(和可选的剪辑路径运算符之后),必须立即进行路径绘制操作。 (许多PDF查看器确实接受无效的操作顺序,但它仍然是无效的)。
即将进行的操作的Alpha值不需要是常数。 相反,它可以由一个蒙版来控制,比如一个径向渐变。
事实上,如果您将图形状态参数定义为:
/Resources<</ExtGState<<
  /GS1 << /SMask<</Type/Mask/S/Luminosity/G 1 0 R >> >>
>> >>

对象1 0是此XObject:

1 0 obj
<<
  /Group<</CS/DeviceGray/S/Transparency>>
  /Type/XObject
  /Resources<</Shading<<
    /Sh1<<
      /Coords[262 186 10 262 186 190]
      /ColorSpace/DeviceRGB
      /ShadingType 3
      /Extend[true true]
      /Function <</Domain[0 1]/FunctionType 2/N 1/C1[0 0 0]/C0[1 1 1]>> 
    >> 
  >>>>
  /Subtype/Form
  /BBox[0 0 500 400]
  /Matrix [1 0 0 1 0 0]
  /Length 10
  /FormType 1
>>stream
  /Sh1 sh
endstream 

您获得了一个基于绿色格子的内容流片段,如下图所示:

变透明红色矩形在绿色格子上


@Jindra 确实,看起来像是复制粘贴遗漏。 - mkl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接