From 1214d642f6745fa6529fc5e3a40570c8ffeb1ad0 Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Wed, 18 Mar 2020 20:20:20 -0400 Subject: [PATCH 01/11] Elaborate on what premultiplied alpha is --- images/premultiplied-example-1.png | Bin 0 -> 10732 bytes images/premultiplied-example-2.png | Bin 0 -> 14453 bytes images/premultiplied-example-3.png | Bin 0 -> 13698 bytes images/premultiplied-example-4.png | Bin 0 -> 13877 bytes images/premultiplied-example-5.png | Bin 0 -> 14352 bytes source | 92 +++++++++++++++++++++++++++-- 6 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 images/premultiplied-example-1.png create mode 100644 images/premultiplied-example-2.png create mode 100644 images/premultiplied-example-3.png create mode 100644 images/premultiplied-example-4.png create mode 100644 images/premultiplied-example-5.png diff --git a/images/premultiplied-example-1.png b/images/premultiplied-example-1.png new file mode 100644 index 0000000000000000000000000000000000000000..841b29e7fbcaab24901cc735c2f8cfb250e5c148 GIT binary patch literal 10732 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 Hu0mjfH7gW` literal 0 HcmV?d00001 diff --git a/images/premultiplied-example-3.png b/images/premultiplied-example-3.png new file mode 100644 index 0000000000000000000000000000000000000000..6403becb38701c1d15dd6c6791853263afa31f7a GIT binary patch literal 13698 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 literal 0 HcmV?d00001 diff --git a/images/premultiplied-example-4.png b/images/premultiplied-example-4.png new file mode 100644 index 0000000000000000000000000000000000000000..3187a8d36eeb9a07d991279c0c30eb9805fcd469 GIT binary patch literal 13877 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 D%wpNd literal 0 HcmV?d00001 diff --git a/images/premultiplied-example-5.png b/images/premultiplied-example-5.png new file mode 100644 index 0000000000000000000000000000000000000000..a998d87c61bae8074f42e2e172f35c19519e9b37 GIT binary patch literal 14352 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

Path2D { +

+

+ Premultiplied alpha refers to one way of representing transparency in an image, the other being non-premultiplied alpha. +

+ +

+ Under non-premultiplied alpha, the red, green, and blue channels of a pixel represent that pixel's color, + and its alpha channel represents that pixel's opacity. +

+ +

+ Under premultiplied alpha, however, the red, green, and blue channels of a pixel represent the amounts of color that pixel adds + to the image, and its alpha channel represents the amount that the pixel obscures whatever is behind it. +

+ +

For instance, assuming the color channels range from 0 (off) to 255 (full intensity), these example colors are represented in the following ways:

+ + + + + + + + + + +
CSS color representation + Premultiplied representation + Non-premultiplied representation + Description of color + Image of color blended above other content +
rgba(255, 127, 0, 1) + 255, 127, 0, 255 + 255, 127, 0, 255 + Completely-opaque orange + +
rgba(255, 255, 0, 0.5) + 127, 127, 0, 127 + 255, 255, 0, 127 + Halfway-opaque yellow + +
Unrepresentable + 255, 127, 0, 127 + Unrepresentable + Additive halfway-opaque orange + +
Unrepresentable + 255, 127, 0, 0 + Unrepresentable + Additive fully-transparent orange + +
rgba(255, 127, 0, 0) + Unrepresentable + 255, 127, 0, 0 + Fully-transparent ("invisible") orange + +
+ +

+ Converting a color value from a non-premultiplied representation to a premultiplied one involves + multiplying the color's red, green, and blue channels by its alpha channel (where an alpha of 0 + means transparent, and an alpha of 1 means opaque). +

+ +

+ Converting a color value from a premultiplied representation to a non-premultiplied one involves + the inverse: dividing the color's red, green, and blue channels by its alpha channel. +

+ +

+ As certain colors can only be represented under premultiplied alpha (for instance, additive + colors), and others can only be represented under non-premultiplied alpha (for instance, + "invisible" colors which hold certain red, green, and blue values even with no opacity); + and division and multiplication on 8-bit integers (which is how canvas' colors are currently + stored) entails a loss of precision, converting between premultiplied and non-premultiplied + alpha is a lossy operation on colors that are not fully opaque. +

+
+
-

A CanvasRenderingContext2D object has an output bitmap that - is initialized when the object is created.

+

+ A CanvasRenderingContext2D object has an output bitmap that + is initialized when the object is created. This output bitmap must use + premultiplied alpha to represent transparent colors. +

The output bitmap has an sy+sh), (sx, sy+sh), in the bitmap's coordinate space units. Pixels outside the output bitmap must be set to transparent black. Pixel - values must not be premultiplied by alpha.

+ values must not be premultiplied by alpha.

When the user agent is required to create an ImageData object, given a positive integer number of rows rows, a positive integer number of pixels per row @@ -64167,9 +64249,9 @@ try { in the rendering context's output bitmap.

-

Due to the lossy nature of converting to and from premultiplied alpha color +

Due to the lossy nature of converting to and from premultiplied alpha color values, pixels that have just been set using putImageData() might be returned to an equivalent + data-x="dom-context-2d-putImageData">putImageData(), and are not completely opaque, might be returned to an equivalent getImageData() as different values.

The current path, transformation matrix, From 4b127c076def0e4c836ed7a4990810477e6446d6 Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Wed, 18 Mar 2020 20:33:27 -0400 Subject: [PATCH 02/11] Add alt attributes to images --- source | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source b/source index e647eec7700..0e141680623 100644 --- a/source +++ b/source @@ -60388,31 +60388,31 @@ interface Path2D { 255, 127, 0, 255 255, 127, 0, 255 Completely-opaque orange - + Completely-opaque orange rgba(255, 255, 0, 0.5) 127, 127, 0, 127 255, 255, 0, 127 Halfway-opaque yellow - + Halfway-opaque yellow Unrepresentable 255, 127, 0, 127 Unrepresentable Additive halfway-opaque orange - + Additive halfway-opaque orange Unrepresentable 255, 127, 0, 0 Unrepresentable Additive fully-transparent orange - + Additive fully-transparent orange rgba(255, 127, 0, 0) Unrepresentable 255, 127, 0, 0 Fully-transparent ("invisible") orange - + Fully-transparent ("invisible") orange

From a7ceae593f8ba71996d8e970ad4e6b9a6ccb0dfc Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Sun, 29 Mar 2020 04:33:57 -0400 Subject: [PATCH 03/11] Clarify some premultiplied alpha stuff --- source | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source b/source index 0e141680623..c9616c34572 100644 --- a/source +++ b/source @@ -60368,7 +60368,7 @@ interface Path2D {

- Under premultiplied alpha, however, the red, green, and blue channels of a pixel represent the amounts of color that pixel adds + Under premultiplied alpha, however, the red, green, and blue channels of a pixel represent the amounts of color that the pixel adds to the image, and its alpha channel represents the amount that the pixel obscures whatever is behind it.

@@ -60409,10 +60409,16 @@ interface Path2D { Additive fully-transparent orange rgba(255, 127, 0, 0) - Unrepresentable + 0, 0, 0, 0 255, 127, 0, 0 Fully-transparent ("invisible") orange Fully-transparent ("invisible") orange + + rgba(0, 127, 255, 0) + 0, 0, 0, 0 + 255, 127, 0, 0 + Fully-transparent ("invisible") turquoise + Fully-transparent ("invisible") turquoise

From 2e36881f5724a05d0650f028e215746204835aa9 Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Tue, 16 Mar 2021 15:27:44 -0400 Subject: [PATCH 04/11] Move premultiplied alpha definition to subsection --- source | 174 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 89 insertions(+), 85 deletions(-) diff --git a/source b/source index c9616c34572..765ffa9137d 100644 --- a/source +++ b/source @@ -60357,91 +60357,6 @@ interface Path2D { -

-

- Premultiplied alpha refers to one way of representing transparency in an image, the other being non-premultiplied alpha. -

- -

- Under non-premultiplied alpha, the red, green, and blue channels of a pixel represent that pixel's color, - and its alpha channel represents that pixel's opacity. -

- -

- Under premultiplied alpha, however, the red, green, and blue channels of a pixel represent the amounts of color that the pixel adds - to the image, and its alpha channel represents the amount that the pixel obscures whatever is behind it. -

- -

For instance, assuming the color channels range from 0 (off) to 255 (full intensity), these example colors are represented in the following ways:

- - - - - - - - - - - -
CSS color representation - Premultiplied representation - Non-premultiplied representation - Description of color - Image of color blended above other content -
rgba(255, 127, 0, 1) - 255, 127, 0, 255 - 255, 127, 0, 255 - Completely-opaque orange - Completely-opaque orange -
rgba(255, 255, 0, 0.5) - 127, 127, 0, 127 - 255, 255, 0, 127 - Halfway-opaque yellow - Halfway-opaque yellow -
Unrepresentable - 255, 127, 0, 127 - Unrepresentable - Additive halfway-opaque orange - Additive halfway-opaque orange -
Unrepresentable - 255, 127, 0, 0 - Unrepresentable - Additive fully-transparent orange - Additive fully-transparent orange -
rgba(255, 127, 0, 0) - 0, 0, 0, 0 - 255, 127, 0, 0 - Fully-transparent ("invisible") orange - Fully-transparent ("invisible") orange -
rgba(0, 127, 255, 0) - 0, 0, 0, 0 - 255, 127, 0, 0 - Fully-transparent ("invisible") turquoise - Fully-transparent ("invisible") turquoise -
- -

- Converting a color value from a non-premultiplied representation to a premultiplied one involves - multiplying the color's red, green, and blue channels by its alpha channel (where an alpha of 0 - means transparent, and an alpha of 1 means opaque). -

- -

- Converting a color value from a premultiplied representation to a non-premultiplied one involves - the inverse: dividing the color's red, green, and blue channels by its alpha channel. -

- -

- As certain colors can only be represented under premultiplied alpha (for instance, additive - colors), and others can only be represented under non-premultiplied alpha (for instance, - "invisible" colors which hold certain red, green, and blue values even with no opacity); - and division and multiplication on 8-bit integers (which is how canvas' colors are currently - stored) entails a loss of precision, converting between premultiplied and non-premultiplied - alpha is a lossy operation on colors that are not fully opaque. -

-
-

@@ -65828,6 +65743,95 @@ interface OffscreenCanvasRenderingContext2D {

+
+
Premultiplied alpha
+ +

+ Premultiplied alpha refers to one way of representing transparency in an image, the other being non-premultiplied alpha. +

+ +

+ Under non-premultiplied alpha, the red, green, and blue channels of a pixel represent that pixel's color, + and its alpha channel represents that pixel's opacity. +

+ +

+ Under premultiplied alpha, however, the red, green, and blue channels of a pixel represent the amounts of color that the pixel adds + to the image, and its alpha channel represents the amount that the pixel obscures whatever is behind it. +

+ +
+

For instance, assuming the color channels range from 0 (off) to 255 (full intensity), these example colors are represented in the following ways:

+ + + + + + + + + + + +
CSS color representation + Premultiplied representation + Non-premultiplied representation + Description of color + Image of color blended above other content +
rgba(255, 127, 0, 1) + 255, 127, 0, 255 + 255, 127, 0, 255 + Completely-opaque orange + Completely-opaque orange +
rgba(255, 255, 0, 0.5) + 127, 127, 0, 127 + 255, 255, 0, 127 + Halfway-opaque yellow + Halfway-opaque yellow +
Unrepresentable + 255, 127, 0, 127 + Unrepresentable + Additive halfway-opaque orange + Additive halfway-opaque orange +
Unrepresentable + 255, 127, 0, 0 + Unrepresentable + Additive fully-transparent orange + Additive fully-transparent orange +
rgba(255, 127, 0, 0) + 0, 0, 0, 0 + 255, 127, 0, 0 + Fully-transparent ("invisible") orange + Fully-transparent ("invisible") orange +
rgba(0, 127, 255, 0) + 0, 0, 0, 0 + 255, 127, 0, 0 + Fully-transparent ("invisible") turquoise + Fully-transparent ("invisible") turquoise +
+
+ +

+ Converting a color value from a non-premultiplied representation to a premultiplied one involves + multiplying the color's red, green, and blue channels by its alpha channel (where an alpha of 0 + means transparent, and an alpha of 1 means opaque). +

+ +

+ Converting a color value from a premultiplied representation to a non-premultiplied one involves + the inverse: dividing the color's red, green, and blue channels by its alpha channel. +

+ +

+ As certain colors can only be represented under premultiplied alpha (for instance, additive + colors), and others can only be represented under non-premultiplied alpha (for instance, + "invisible" colors which hold certain red, green, and blue values even with no opacity); + and division and multiplication on 8-bit integers (which is how canvas' colors are currently + stored) entails a loss of precision, converting between premultiplied and non-premultiplied + alpha is a lossy operation on colors that are not fully opaque. +

+
+

Custom elements

Introduction

From 76fbc56460f745a64173f07261303a868dd6e04c Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Tue, 16 Mar 2021 15:34:31 -0400 Subject: [PATCH 05/11] Move "output bitmap premultiplied" to the section --- source | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source b/source index 765ffa9137d..9498abbf1a2 100644 --- a/source +++ b/source @@ -60361,8 +60361,7 @@ interface Path2D {

A CanvasRenderingContext2D object has an output bitmap that - is initialized when the object is created. This output bitmap must use - premultiplied alpha to represent transparent colors. + is initialized when the object is created.

@@ -65744,7 +65743,7 @@ interface OffscreenCanvasRenderingContext2D {
-
Premultiplied alpha
+
Premultiplied alpha and the 2D rendering context

Premultiplied alpha refers to one way of representing transparency in an image, the other being non-premultiplied alpha. @@ -65830,6 +65829,9 @@ interface OffscreenCanvasRenderingContext2D { stored) entails a loss of precision, converting between premultiplied and non-premultiplied alpha is a lossy operation on colors that are not fully opaque.

+ + A CanvasRenderingContext2D's output bitmap must use premultiplied alpha + to represent transparent colors.

Custom elements

From 72d43ce4294e4bb95c39ea285e19143cb419bc4b Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Tue, 16 Mar 2021 15:37:00 -0400 Subject: [PATCH 06/11] Also specify offscreen canvas premultiplication --- source | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source b/source index 9498abbf1a2..600149f4e63 100644 --- a/source +++ b/source @@ -65830,8 +65830,11 @@ interface OffscreenCanvasRenderingContext2D { alpha is a lossy operation on colors that are not fully opaque.

- A CanvasRenderingContext2D's output bitmap must use premultiplied alpha - to represent transparent colors. +

+ A CanvasRenderingContext2D's output bitmap and an + OffscreenCanvasRenderingContext2D's bitmap must use premultiplied alpha to represent transparent colors. +

Custom elements

From 8c9cb5089d441f74c0c31583ad3829dd7d3c480b Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Tue, 16 Mar 2021 15:49:28 -0400 Subject: [PATCH 07/11] Note why canvas premultiplication is mandatory --- source | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source b/source index 600149f4e63..48a1412b4da 100644 --- a/source +++ b/source @@ -65835,6 +65835,14 @@ interface OffscreenCanvasRenderingContext2D { OffscreenCanvasRenderingContext2D's bitmap must use premultiplied alpha to represent transparent colors.

+ +
+ It is important for canvas bitmaps to represent colors using premultiplied alpha because it + affects the range of representable colors. While additive colors cannot currently be drawn onto + canvases directly because CSS colors are non-premultiplied and cannot represent them, it is + still possible to, for instance, draw additive colors onto a WebGL canvas and then draw that + WebGL canvas onto a 2D canvas via drawImage. +

Custom elements

From 62311e16bb7388f4d54c12c14ebf646a97ee9423 Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Tue, 16 Mar 2021 15:54:50 -0400 Subject: [PATCH 08/11] Rewrap text --- source | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/source b/source index 48a1412b4da..a443bf7d0dd 100644 --- a/source +++ b/source @@ -60359,10 +60359,8 @@ interface Path2D {
-

- A CanvasRenderingContext2D object has an output bitmap that - is initialized when the object is created. -

+

A CanvasRenderingContext2D object has an output bitmap that + is initialized when the object is created.

The output bitmap has an output bitmap.

-

Due to the lossy nature of converting to and from premultiplied alpha color - values, pixels that have just been set using putImageData(), and are not completely opaque, might be returned to an equivalent - getImageData() as different values.

+

Due to the lossy nature of converting to and from premultiplied alpha color values, pixels that have + just been set using putImageData(), and are not + completely opaque, might be returned to an equivalent getImageData() as different values.

The current path, transformation matrix, shadow attributes, global @@ -65746,21 +65745,26 @@ interface OffscreenCanvasRenderingContext2D {

Premultiplied alpha and the 2D rendering context

- Premultiplied alpha refers to one way of representing transparency in an image, the other being non-premultiplied alpha. + Premultiplied alpha refers to one way of + representing transparency in an image, the other being non-premultiplied alpha.

- Under non-premultiplied alpha, the red, green, and blue channels of a pixel represent that pixel's color, - and its alpha channel represents that pixel's opacity. + Under non-premultiplied alpha, the red, green, and blue channels of a pixel represent that + pixel's color, and its alpha channel represents that pixel's opacity.

- Under premultiplied alpha, however, the red, green, and blue channels of a pixel represent the amounts of color that the pixel adds - to the image, and its alpha channel represents the amount that the pixel obscures whatever is behind it. + Under premultiplied alpha, however, the red, green, and blue channels of a pixel represent the + amounts of color that the pixel adds to the image, and its alpha channel represents the amount + that the pixel obscures whatever is behind it.

-

For instance, assuming the color channels range from 0 (off) to 255 (full intensity), these example colors are represented in the following ways:

+

+ For instance, assuming the color channels range from 0 (off) to 255 (full intensity), these + example colors are represented in the following ways: +

@@ -65824,10 +65828,10 @@ interface OffscreenCanvasRenderingContext2D {

As certain colors can only be represented under premultiplied alpha (for instance, additive colors), and others can only be represented under non-premultiplied alpha (for instance, - "invisible" colors which hold certain red, green, and blue values even with no opacity); - and division and multiplication on 8-bit integers (which is how canvas' colors are currently - stored) entails a loss of precision, converting between premultiplied and non-premultiplied - alpha is a lossy operation on colors that are not fully opaque. + "invisible" colors which hold certain red, green, and blue values even with no opacity); and + division and multiplication on 8-bit integers (which is how canvas' colors are currently stored) + entails a loss of precision, converting between premultiplied and non-premultiplied alpha is a + lossy operation on colors that are not fully opaque.

From f13e1e3d355629209087eebed340b6c162fc0a1f Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Tue, 16 Mar 2021 17:27:20 -0400 Subject: [PATCH 09/11] Link to premultiplication info in ImageBitmap --- source | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/source b/source index a443bf7d0dd..265c6f32876 100644 --- a/source +++ b/source @@ -65815,14 +65815,16 @@ interface OffscreenCanvasRenderingContext2D {

- Converting a color value from a non-premultiplied representation to a premultiplied one involves - multiplying the color's red, green, and blue channels by its alpha channel (where an alpha of 0 - means transparent, and an alpha of 1 means opaque). + Converting a color value from a non-premultiplied + representation to a premultiplied one involves multiplying the color's red, green, and + blue channels by its alpha channel (remapping the range of the alpha channel such that "fully + transparent" is 0, and "fully opaque" is 1).

- Converting a color value from a premultiplied representation to a non-premultiplied one involves - the inverse: dividing the color's red, green, and blue channels by its alpha channel. + Converting a color value from a premultiplied + representation to a non-premultiplied one involves the inverse: dividing the color's red, + green, and blue channels by its alpha channel.

@@ -94819,7 +94821,7 @@ dictionary ImageBitmapOptions { if the premultiplyAlpha option is set to "premultiply", the bitmap data's color channels are - premultiplied by its alpha channel. + premultiplied by its alpha channel.

Rejects the promise with an "InvalidStateError" DOMException if the source image is not in a valid state (e.g., an img @@ -95259,14 +95261,15 @@ dictionary ImageBitmapOptions { optimal for drawing images onto the canvas.

  • If val is "premultiply", the output - that is not premultiplied by alpha must have its color components multiplied by alpha and - that is premultiplied by alpha must be left untouched.

  • + data-x="dom-PremultiplyAlpha-premultiply">premultiply", the output that + is not premultiplied by alpha must have its color components multiplied by alpha and that is premultiplied by alpha + must be left untouched.

  • If val is "none", the output that is not - premultiplied by alpha must be left untouched and that is premultiplied by alpha must have - its color components divided by alpha.

  • + premultiplied by alpha must be left untouched and that is premultiplied by alpha must have its + color components divided by alpha.

    From 2bbf985ab81fad4318d8a9b597d18a3247fd6770 Mon Sep 17 00:00:00 2001 From: Domenic Denicola Date: Wed, 31 Mar 2021 18:36:00 -0400 Subject: [PATCH 10/11] Source formatting nits and include in the dev edition --- source | 178 +++++++++++++++++++++++++-------------------------------- 1 file changed, 79 insertions(+), 99 deletions(-) diff --git a/source b/source index 265c6f32876..c95fe1640e7 100644 --- a/source +++ b/source @@ -60360,7 +60360,7 @@ interface Path2D {

    A CanvasRenderingContext2D object has an output bitmap that - is initialized when the object is created.

    + is initialized when the object is created.

    The output bitmap has an OffscreenCanvasRenderingContext2D {

    -
    -
    Premultiplied alpha and the 2D rendering context
    +
    Premultiplied alpha and the 2D rendering context
    -

    - Premultiplied alpha refers to one way of - representing transparency in an image, the other being non-premultiplied alpha. -

    +

    Premultiplied alpha refers to one way of + representing transparency in an image, the other being non-premultiplied alpha.

    -

    - Under non-premultiplied alpha, the red, green, and blue channels of a pixel represent that - pixel's color, and its alpha channel represents that pixel's opacity. -

    +

    Under non-premultiplied alpha, the red, green, and blue channels of a pixel represent that + pixel's color, and its alpha channel represents that pixel's opacity.

    -

    - Under premultiplied alpha, however, the red, green, and blue channels of a pixel represent the - amounts of color that the pixel adds to the image, and its alpha channel represents the amount - that the pixel obscures whatever is behind it. -

    +

    Under premultiplied alpha, however, the red, green, and blue channels of a pixel represent the + amounts of color that the pixel adds to the image, and its alpha channel represents the amount + that the pixel obscures whatever is behind it.

    -
    -

    - For instance, assuming the color channels range from 0 (off) to 255 (full intensity), these - example colors are represented in the following ways: -

    +
    +

    For instance, assuming the color channels range from 0 (off) to 255 (full intensity), these + example colors are represented in the following ways:

    -
    - - - - - - - - - + + + + + + +
    CSS color representation - Premultiplied representation - Non-premultiplied representation - Description of color - Image of color blended above other content -
    rgba(255, 127, 0, 1) - 255, 127, 0, 255 - 255, 127, 0, 255 - Completely-opaque orange - Completely-opaque orange -
    rgba(255, 255, 0, 0.5) - 127, 127, 0, 127 - 255, 255, 0, 127 - Halfway-opaque yellow - Halfway-opaque yellow -
    Unrepresentable - 255, 127, 0, 127 - Unrepresentable - Additive halfway-opaque orange - Additive halfway-opaque orange -
    Unrepresentable - 255, 127, 0, 0 - Unrepresentable - Additive fully-transparent orange - Additive fully-transparent orange -
    rgba(255, 127, 0, 0) - 0, 0, 0, 0 - 255, 127, 0, 0 - Fully-transparent ("invisible") orange - Fully-transparent ("invisible") orange + + -
    rgba(0, 127, 255, 0) - 0, 0, 0, 0 - 255, 127, 0, 0 - Fully-transparent ("invisible") turquoise - Fully-transparent ("invisible") turquoise -
    - +
    CSS color representation + Premultiplied representation + Non-premultiplied representation + Description of color + Image of color blended above other content +
    rgba(255, 127, 0, 1) + 255, 127, 0, 255 + 255, 127, 0, 255 + Completely-opaque orange + Completely-opaque orange +
    rgba(255, 255, 0, 0.5) + 127, 127, 0, 127 + 255, 255, 0, 127 + Halfway-opaque yellow + Halfway-opaque yellow +
    Unrepresentable + 255, 127, 0, 127 + Unrepresentable + Additive halfway-opaque orange + Additive halfway-opaque orange +
    Unrepresentable + 255, 127, 0, 0 + Unrepresentable + Additive fully-transparent orange + Additive fully-transparent orange +
    rgba(255, 127, 0, 0) + 0, 0, 0, 0 + 255, 127, 0, 0 + Fully-transparent ("invisible") orange + Fully-transparent ("invisible") orange +
    rgba(0, 127, 255, 0) + 0, 0, 0, 0 + 255, 127, 0, 0 + Fully-transparent ("invisible") turquoise + Fully-transparent ("invisible") turquoise +
    +
    -

    - Converting a color value from a non-premultiplied - representation to a premultiplied one involves multiplying the color's red, green, and - blue channels by its alpha channel (remapping the range of the alpha channel such that "fully - transparent" is 0, and "fully opaque" is 1). -

    +

    Converting a color value from a non-premultiplied + representation to a premultiplied one involves multiplying the color's red, green, and + blue channels by its alpha channel (remapping the range of the alpha channel such that "fully + transparent" is 0, and "fully opaque" is 1).

    -

    - Converting a color value from a premultiplied - representation to a non-premultiplied one involves the inverse: dividing the color's red, - green, and blue channels by its alpha channel. -

    +

    Converting a color value from a premultiplied + representation to a non-premultiplied one involves the inverse: dividing the color's red, + green, and blue channels by its alpha channel.

    -

    - As certain colors can only be represented under premultiplied alpha (for instance, additive - colors), and others can only be represented under non-premultiplied alpha (for instance, - "invisible" colors which hold certain red, green, and blue values even with no opacity); and - division and multiplication on 8-bit integers (which is how canvas' colors are currently stored) - entails a loss of precision, converting between premultiplied and non-premultiplied alpha is a - lossy operation on colors that are not fully opaque. -

    +

    As certain colors can only be represented under premultiplied alpha (for instance, additive + colors), and others can only be represented under non-premultiplied alpha (for instance, + "invisible" colors which hold certain red, green, and blue values even with no opacity); and + division and multiplication on 8-bit integers (which is how canvas' colors are currently stored) + entails a loss of precision, converting between premultiplied and non-premultiplied alpha is a + lossy operation on colors that are not fully opaque.

    -

    - A CanvasRenderingContext2D's output bitmap and an - OffscreenCanvasRenderingContext2D's bitmap must use premultiplied alpha to represent transparent colors. -

    +

    A CanvasRenderingContext2D's output bitmap and an + OffscreenCanvasRenderingContext2D's bitmap must use premultiplied alpha to represent transparent colors.

    -
    - It is important for canvas bitmaps to represent colors using premultiplied alpha because it - affects the range of representable colors. While additive colors cannot currently be drawn onto - canvases directly because CSS colors are non-premultiplied and cannot represent them, it is - still possible to, for instance, draw additive colors onto a WebGL canvas and then draw that - WebGL canvas onto a 2D canvas via drawImage. -
    -
    +

    It is important for canvas bitmaps to represent colors using premultiplied alpha + because it affects the range of representable colors. While additive colors cannot currently be + drawn onto canvases directly because CSS colors are non-premultiplied and cannot represent them, + it is still possible to, for instance, draw additive colors onto a WebGL canvas and then draw that + WebGL canvas onto a 2D canvas via drawImage().

    Custom elements

    From 9ee37bd7ebf837a2625bd43c10da82429669da0d Mon Sep 17 00:00:00 2001 From: adroitwhiz Date: Mon, 5 Apr 2021 14:44:51 -0400 Subject: [PATCH 11/11] Clarify alt text --- source | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source b/source index c95fe1640e7..4b005e83ea1 100644 --- a/source +++ b/source @@ -65771,37 +65771,37 @@ interface OffscreenCanvasRenderingContext2D { 255, 127, 0, 255 255, 127, 0, 255 Completely-opaque orange - Completely-opaque orange + An opaque orange circle sits atop a background rgba(255, 255, 0, 0.5) 127, 127, 0, 127 255, 255, 0, 127 Halfway-opaque yellow - Halfway-opaque yellow + A yellow circle, halfway transparent, sits atop a background Unrepresentable 255, 127, 0, 127 Unrepresentable Additive halfway-opaque orange - Additive halfway-opaque orange + An orange circle somewhat brightens the background that it sits atop Unrepresentable 255, 127, 0, 0 Unrepresentable Additive fully-transparent orange - Additive fully-transparent orange + An orange circle completely brightens the background that it sits atop rgba(255, 127, 0, 0) 0, 0, 0, 0 255, 127, 0, 0 Fully-transparent ("invisible") orange - Fully-transparent ("invisible") orange + An empty background with nothing atop it rgba(0, 127, 255, 0) 0, 0, 0, 0 255, 127, 0, 0 Fully-transparent ("invisible") turquoise - Fully-transparent ("invisible") turquoise + An empty background with nothing atop it