colorjs.io
Version:
Let’s get serious about color
44 lines (39 loc) • 1 kB
JavaScript
import RGBColorSpace from "../rgbspace.js";
import REC2020Linear from "./rec2020-linear.js";
// FIXME see https://github.com/LeaVerou/color.js/issues/190
const a = 0.17883277;
const b = 0.28466892; // 1 - (4 * a)
const c = 0.55991073; // 0.5 - a * Math.log(4 *a)
export default new RGBColorSpace({
id: "rec2100hlg",
cssid: "rec2100-hlg",
name: "REC.2100-HLG",
referred: "scene",
base: REC2020Linear,
toBase (RGB) {
// given HLG encoded component in range [0, 1]
// return media-white relative linear-light
return RGB.map(function (val) {
if (val <= 1/12) {
return Math.sqrt( 3 * val);
}
return a * Math.log(12 * val - b) + c;
});
},
fromBase (RGB) {
// given media-white relative linear-light
// return HLG encoded component in range [0, 1]
// per ITU Rec BT.2390
return RGB.map(function (val) {
if (val <= 0.5) {
return (val ** 2) / 3;
}
return Math.exp(((val - c) / a) + b) / 12;
});
},
formats: {
color: {
id: "rec2100-hlg"
},
},
});