feat(水印合成): 修复水印并统一透明合成
build.yaml / build (push) Successful in 44s

This commit is contained in:
xiaoqidun committed 2026-10-04 11:01:11 +08:00
1 parent 84a67d17df
commit 5d599dc835
5 files changed
+86 -237

No files matched your search

+6 -2
View File
@@ -176,7 +176,7 @@ func (p *pdfImporter) compositePattern(paint pdfgo.Paint) (*pdfCompositePattern,
return pattern, nil
}
// directCompositeNode 检查图元及其图案单元能否独立保留,不忽略单元内的背景混合
// directCompositeNode 检查图元、透明组和图案单元能否独立保留,逐层核对背景混合
// 入参: node 图元, space 混合空间
// 返回: bool 是否可直接转换, error 图案解析错误
func (p *pdfImporter) directCompositeNode(node pdfCompositeNode, space *pdfgo.ColorSpace) (bool, error) {
@@ -219,7 +219,11 @@ func (p *pdfImporter) directCompositeNode(node pdfCompositeNode, space *pdfgo.Co
}
}
}
if !node.opaque(space) && !(space.SRGBEquivalent() && node.direct()) {
directGroup := false
if group := node.group; group != nil && !group.Knockout && group.Alpha == 1 && group.SoftMask == nil && pdfNormalBlend(group.BlendMode) && (group.ColorSpace == nil || group.ColorSpace.SRGBEquivalent()) {
directGroup = true
}
if !node.opaque(space) && !(space.SRGBEquivalent() && (directGroup || node.direct())) {
if node.textObject != nil && space.SRGBEquivalent() {
for _, child := range node.children {
if direct, err := p.directCompositeNode(child, space); err != nil || !direct {