diff --git a/internal/codec/pdf/color.go b/internal/codec/pdf/color.go index 4059e31..609771c 100644 --- a/internal/codec/pdf/color.go +++ b/internal/codec/pdf/color.go @@ -250,6 +250,9 @@ func CompositeGroupRegion(ctx context.Context, pixels, initial, result []Composi } components, parentComponents := space.Components(), parent.Components() var target pdfgo.ColorantPixel + var previous, previousInitial, previousResult, composed CompositePixel + var previousAlpha float64 + ready := false for y := region.Min.Y; y < region.Max.Y; y++ { if err := ctx.Err(); err != nil { return err @@ -265,6 +268,11 @@ func CompositeGroupRegion(ctx context.Context, pixels, initial, result []Composi alpha *= mask[i] } pixel := &result[i] + if ready && pixels[i] == previous && initial[i] == previousInitial && *pixel == previousResult && alpha == previousAlpha { + pixels[i] = composed + continue + } + previous, previousInitial, previousResult, previousAlpha = pixels[i], initial[i], *pixel, alpha target.Values = pixels[i].Values[:parentComponents] target.Alpha = pixels[i].Alpha target.Shape = pixels[i].Shape @@ -277,6 +285,7 @@ func CompositeGroupRegion(ctx context.Context, pixels, initial, result []Composi return err } pixels[i].Alpha, pixels[i].Effect, pixels[i].Shape = target.Alpha, target.Effect, target.Shape + composed, ready = pixels[i], true } } return nil diff --git a/internal/webui/wasm.go b/internal/webui/wasm.go index 994d380..1635d35 100644 --- a/internal/webui/wasm.go +++ b/internal/webui/wasm.go @@ -132,6 +132,7 @@ type outputContext struct { cancel context.CancelFunc checkpoint func() error checked time.Time + pending uint8 } // Write 将数据块交给浏览器保存 @@ -5490,6 +5491,11 @@ func (c *outputContext) Err() error { if err := c.Context.Err(); err != nil { return err } + if c.pending != 0 { + c.pending-- + return nil + } + c.pending = 15 if time.Since(c.checked) >= 50*time.Millisecond { c.checked = time.Now() if err := c.checkpoint(); err != nil {