Source code

Revision control

Copy as Markdown

Other Tools

import { clamp01, multiplyAlpha, unmultiplyAlpha } from "./utils.js";
export function plusLighter(pixels) {
if (pixels.length === 1) return pixels[0];
return pixels.reduce((destination, source) => {
const premultipliedSource = multiplyAlpha(source);
const premultipliedDestination = multiplyAlpha(destination);
const premultipliedResult = premultipliedDestination.map((channel, i) =>
clamp01(channel + premultipliedSource[i])
);
return unmultiplyAlpha(premultipliedResult);
});
}
export const tests = [
// Each test is a list of colors to composite.
// Each color is [r, g, b, a], unmultiplied, in the range 0-1.
[
[1, 0, 0, 0.5],
[0, 0, 1, 0.5],
],
[
[1, 0, 0, 0.25],
[0, 0, 1, 0.25],
],
[
[0.5, 0, 0, 0.5],
[0, 0, 1, 0.5],
],
// Test clamping
[
[1, 0, 0, 1],
[0, 0, 1, 1],
],
// Test more than two elements
[
[1, 0, 0, 0.25],
[0, 0, 1, 0.25],
[0, 1, 0, 0.25],
[0.5, 0.4, 0.25, 0.25],
],
// Test a single element
[
[0.5, 0, 0, 0.25],
],
];