xyz2lab.ts 799 Bytes
/**
 * @preserve
 * Copyright 2015-2016 Igor Bezkrovnyi
 * All rights reserved. (MIT Licensed)
 *
 * xyz2lab.ts - part of Image Quantization Library
 */
const refX : number = 0.95047, //ref_X =  95.047   Observer= 2°, Illuminant= D65
      refY : number = 1.00000, //ref_Y = 100.000
      refZ : number = 1.08883; //ref_Z = 108.883

function pivot(n : number) : number {
    return n > 0.008856 ? Math.pow(n, 1 / 3) : ( 7.787 * n + 16 / 116);
}

export function xyz2lab(x : number, y : number, z : number) : {L : number; a : number; b : number} {
    x = pivot(x / refX);
    y = pivot(y / refY);
    z = pivot(z / refZ);

    if (( 116 * y ) - 16 < 0) throw new Error("xxx")
    return {
        L : Math.max(0, ( 116 * y ) - 16),
        a : 500 * ( x - y ),
        b : 200 * ( y - z )
    }
}