W3C svg print logo

SVG Compositing 1.2, Part 2: Language

W3C Working Draft

This version:
Latest version:
Editors:
Anthony Grasso, Canon Information Systems Research Australia <anthony.grasso@cisra.canon.com.au>]
Authors:
The authors of this specification are the participants of the W3C SVG Working Group.

Abstract

This Working Draft defines features of the Scalable Vector Graphics (SVG) Language that are specifically for display and printing environments.

This document defines the markup used by SVG Compositing.

Status of This Document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. The latest status of this document series is maintained at the W3C.

This document is an editors draft. It defines features of SVG specific to compositing. It is a draft in progress; some descriptions in this document may be incomplete. This document shows the current thoughts of the SVG Working Group on the use of SVG for compositing and should not yet be considered stable. There is an accompanying SVG Compositing 1.2, Part 1: Primer that lists the ways SVG Compositing may be used for displaying and compositing.

This document has been produced by the W3C SVG Working Group as part of the W3C Graphics Activity within the Interaction Domain. The Working Group expects to advance this Working Draft to Recommendation Status.

We explicitly invite comments on this specification. Please send them to public-svg-compositing@w3.org (archives). For comments on the core SVG language, use www-svg@w3.org: the public email list for issues related to vector graphics on the Web (archives). Acceptance of the archiving policy is requested automatically upon first post to either list. To subscribe to these lists send an email to public-svg-compositing-request@w3.org or www-svg-request@w3.org with the word subscribe in the subject line.

Publication as a Working Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.

This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.


How to read this document and give feedback

This draft of SVG Compositing is a snapshot of a work-in-progress.

The main purpose of this document is to encourage public feedback. The best way to give feedback is by sending an email to public-svg-compositing@w3.org. Please include some kind of keyword that identifies the area of the specification the comment is referring to in the subject line of your message (e.g Compositing blend modes). If you have comments on multiple areas of this document, then it is probably best to split those comments into multiple messages.

The public are welcome to comment on any aspect in this document, but there are a few areas in which the SVG Working Group are explicitly requesting feedback. These areas are noted in place within this document like this.

Introduction

This document lists features that may be used in the context of display and printing. The various usage scenarios are listed in the SVG Compositing Requirements document.

This document is normative.

This document contains explicit conformance criteria that overlap with some RNG definitions in requirements. If there is any conflict between the two, the explicit conformance criteria are the definitive reference.

Alpha Compositing

When compositing using Porter-Duff extended blending operations color and opacity values may fall outside the range zero to one.

A User Agent MUST clamp color and opacity values between zero and one inclusive.
A User Agent MUST clamp premultiplied color values between zero and one inclusive.

Container Element Background Control

The 'clip-to-self' property

The 'clip-to-self' property determines if the object effects pixels not covered by the object.

'clip-to-self'
Value: object | canvas | inherit
Initial: canvas
Applies to: All elements that render. The host language is responsible for stating which elements render. For SVG: container elements and graphics elements.
Inherited: no
Percentages: N/A
Media: visual
Animatable:    yes
object
Compositing an object only effects the pixels covered by the object
canvas
Compositing an object effects all pixels on the canvas by compositing completely transparent source onto the destination for areas not covered by the object. This is the lacuna value .
This property was changed from a boolean value. Where a value of 'object' was equivalent 'true' and a value of 'canvas' was equivalent to 'false'. Is this an acceptable change?

The 'clip-to-self' property is not the only property that can affect regions not covered by the source graphic. Some compositing operations defined in the 'comp-op' property may effect pixels where the source graphic is completely transparent.

A User Agent MUST effect the pixel region as specified by the 'clip-to-self' property.

The 'enable-background' property

The 'enable-background' property controls how the group image canvas for group compositing is initialised and managed.

'enable-background'
Value: accumulate | new [ <x> <y> <width> <height> ] | inherit
Initial: accumulate
Applies to: Elements that contain elements that render. The host language is responsible for stating which elements contain elements that render. For SVG: container elements.
Inherited: no
Percentages: N/A
Media: visual
Animatable: no

new
A group image canvas is established which is initialised to transparent black. An additional group background buffer is created to store the percentage of background in the group image canvas. All children of the current element shall be rendered into the new group image canvas.

The optional <x>, <y>, <width> and <height> parameters indicate in user space, the subregion of the container element where objects are composited onto. These parameters act as a clipping rectangle on the group image canvas enabling the SVG usage agent to potentially allocate a smaller temporary image buffer than the effective bounds of the container element. If not all the <x>, <y>, <width> and <height> values are specified, or if either <width> or <height> are specified as a value less than 1, then the objects are composited as if the 'enable-background' property was set to accumulate.

accumulate
A group image canvas is established which is initialised with corresponding area of the current canvas copied into it. An additional group background buffer is created to store the percentage of background in the group image canvas. All children of the current element shall be rendered into the new group image canvas. This is the lacuna value .
A User Agent MUST initialise the buffer of the container element as specified by 'enable-background' property.
A User Agent MUST render children with in a container element as if the 'enable-background' property was set to 'accumulate' if not all the optional 'new' parameters are specified when optional parameters are provided.
A User Agent MUST render children with in a container element as if the 'enable-background' property was set to 'accumulate' if the 'new' optional <width> or <height> parameters are less than 1.

For groups with an 'enable-background' value set to accumulate, the compositing operation used to place the group onto the background is modified. The operation will apply any reduction to the background caused by the objects.

A User Agent MUST apply the reduction to the additional background buffer caused by compositing an object in the group when 'enable-background' is set to accumulate.

Elements containing a 'comp-op' property value of clear, src, dst, dst-over, src-in, dst-in, src-out, dst-out, src-atop, dst-atop, xor can potentially reduce the opacity of the destination and are only valid where one of the element's ancestorial container element has the 'enable-background' property set to new. Elements without an ancestor with the 'enable-background' property set to new these operations are technically an error.

A User Agent MUST ignore the operation specified for elements with an encestor and 'enable-background' set to new. The element MUST be rendered using the 'src-over' compositing operation.

The 'knock-out' property

The 'knock-out' property determines if the color and opacity of an object replaces the color and opacity of objects it overlaps in the container.

'knock-out'
Value: replace | preserve | inherit
Initial: preserve
Applies to: Elements that contain elements that render. The host language is responsible for stating which elements contain elements that render. For SVG: container elements.
Inherited: no
Percentages: N/A
Media: visual
Animatable: no
replace
The object color and opacity replaces that of other objects within the container element.
preserve
The object color and opacity is overlayed normally as per the container compositing operation. This is the lacuna value .
This property was changed from a boolean value. Where a value of 'replace' was equivalent 'true' and a value of 'preserve' was equivalent to 'false'. Is this an acceptable change?

For a complex group where the 'knock-out' property is set to replace, the buffer is created. The initial contents of the buffer and whether a secondary opacity channel is created depends on the value of the 'enable-background' property.

A User Agent MUST effect the color and opactiy of the objects within the container element as specified by the 'knock-out' property.

Container Element Compositing Operators

The 'comp-op' property

The 'comp-op' property determines the compositing operation used when placing elements onto the canvas.

'comp-op'
Value: clear | src | dst | src-over | dst-over | src-in | dst-in | src-out | dst-out | src-atop | dst-atop | xor | plus | multiply | screen | overlay | darken | lighten | color-dodge | color-burn | hard-light | soft-light | difference | exclusion | inherit
Initial: src-over
Applies to: Elements that contain elements that render. The host language is responsible for stating which elements contain elements that render. For SVG: container elements.
Inherited: no
Percentages: N/A
Media: visual
Animatable: yes
clear
Both the color and the alpha of the destination are cleared. Neither the source nor the destination are used as input.
src
The source is copied to the destination. The destination is not used as input.
dst
The destination is left untouched.
src-over
The source is composited over the destination. This is the lacuna value .
dst-over
The destination is composited over the source and the result replaces the destination.
src-in
The part of the source lying inside of the destination replaces the destination.
dst-in
The part of the destination lying inside of the source replaces the destination.
src-out
The part of the source lying outside of the destination replaces the destination.
dst-out
The part of the destination lying outside of the source replaces the destination.
src-atop
The part of the source lying inside of the destination is composited onto the destination.
dst-atop
The part of the destination lying inside of the source is composited over the source and replaces the destination.
xor
The part of the source that lies outside of the destination is combined with the part of the destination that lies outside of the source.
plus
The source is added to the destination and replaces the destination. This operator is useful for animating a dissolve between two images.
multiply
The source is multiplied by the destination and replaces the destination. The resultant color is always at least as dark as either of the two constituent colors. Multiplying any color with black produces black. Multiplying any color with white leaves the original color unchanged.
screen
The source and destination are complemented and then multiplied and then replace the destination. The resultant color is always at least as light as either of the two constituent colors. Screening any color with white produces white. Screening any color with black leaves the original color unchanged.
overlay
Multiplies or screens the colors, dependent on the destination color. Source colors overlay the destination whilst preserving its highlights and shadows. The destination color is not replaced, but is mixed with the source color to reflect the lightness or darkness of the destination.
darken
Selects the darker of the destination and source colors. The destination is replaced with the source when the source is darker, otherwise it is left unchanged.
lighten
Selects the lighter of the destination and source colors. The destination is replaced with the source when the source is lighter, otherwise it is left unchanged.
color-dodge
Brightens the destination color to reflect the source color. Painting with black produces no change.
color-burn
Darkens the destination color to reflect the source color. Painting with white produces no change.
hard-light
Multiplies or screens the colors, dependent on the source color value. If the source color is lighter than 0.5, the destination is lightened as if it were screened. If the source color is darker than 0.5, the destination is darkened, as if it were multiplied. The degree of lightening or darkening is proportional to the difference between the source color and 0.5. If it is equal to 0.5 the destination is unchanged. Painting with pure black or white produces black or white.
soft-light
Darkens or lightens the colors, dependent on the source color value. If the source color is lighter than 0.5, the destination is lightened. If the source color is darker than 0.5, the destination is darkened, as if it were burned in. The degree of darkening or lightening is proportional to the difference between the source color and 0.5. If it is equal to 0.5, the destination is unchanged. Painting with pure black or white produces a distinctly darker or lighter area, but does not result in pure black or white.
difference
Subtracts the darker of the two constituent colors from the lighter. Painting with white inverts the destination color. Painting with black produces no change.
exclusion
Produces an effect similar to that of 'difference', but appears as lower contrast. Painting with white inverts the destination color. Painting with black produces no change.

For many of the operators listed above, the destination is modified in regions of the image where the source is completely transparent. Pixels that the source does not touch are considered transparent, and as such may be modified, depending on the compositing operation.

A User Agent MUST effect the color and opactiy of the objects within the container element as specified by the 'comp-op' property.

References

Normative References

[SVG12]
Scalable Vector Graphics (SVG) 1.2 Specification, Dean Jackson editor, W3C, 27 October 2004 (Working Draft). See http://www.w3.org/TR/2004/WD-SVG12-20041027/

Informative References

[SVG12Reqs]
SVG 1.1/1.2/2.0 Requirements, Dean Jackson editor, W3C, 22 April 2002 (Working Draft). See http://www.w3.org/TR/2002/WD-SVG2Reqs-20020422/
[SVG12CompositingReqs]
SVG Compositing Requirements, Anthony Grasso editor, W3C, 2007 (Working Draft). See

Author List

The authors of this specification are the participants of the W3C SVG Working Group.