Replace all occurences of var
with let
/const
in src/core/colorspace.js
This commit is contained in:
parent
ce9a38c536
commit
a182907592
@ -29,13 +29,13 @@ import { isDict, isName, isStream } from './primitives';
|
|||||||
* @param {Number} alpha01 - Size reserved for the alpha channel.
|
* @param {Number} alpha01 - Size reserved for the alpha channel.
|
||||||
*/
|
*/
|
||||||
function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {
|
function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {
|
||||||
var COMPONENTS = 3;
|
const COMPONENTS = 3;
|
||||||
alpha01 = alpha01 !== 1 ? 0 : alpha01;
|
alpha01 = alpha01 !== 1 ? 0 : alpha01;
|
||||||
var xRatio = w1 / w2;
|
let xRatio = w1 / w2;
|
||||||
var yRatio = h1 / h2;
|
let yRatio = h1 / h2;
|
||||||
var newIndex = 0, oldIndex;
|
let newIndex = 0, oldIndex;
|
||||||
var xScaled = new Uint16Array(w2);
|
let xScaled = new Uint16Array(w2);
|
||||||
var w1Scanline = w1 * COMPONENTS;
|
let w1Scanline = w1 * COMPONENTS;
|
||||||
|
|
||||||
for (let i = 0; i < w2; i++) {
|
for (let i = 0; i < w2; i++) {
|
||||||
xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;
|
xScaled[i] = Math.floor(i * xRatio) * COMPONENTS;
|
||||||
@ -121,10 +121,10 @@ class ColorSpace {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'ColorSpace.fillRgb: Unsupported "dest" type.');
|
'ColorSpace.fillRgb: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var count = originalWidth * originalHeight;
|
let count = originalWidth * originalHeight;
|
||||||
var rgbBuf = null;
|
let rgbBuf = null;
|
||||||
var numComponentColors = 1 << bpc;
|
let numComponentColors = 1 << bpc;
|
||||||
var needsResizing = originalHeight !== height || originalWidth !== width;
|
let needsResizing = originalHeight !== height || originalWidth !== width;
|
||||||
|
|
||||||
if (this.isPassthrough(bpc)) {
|
if (this.isPassthrough(bpc)) {
|
||||||
rgbBuf = comps;
|
rgbBuf = comps;
|
||||||
@ -139,12 +139,12 @@ class ColorSpace {
|
|||||||
// TODO it may be worth while to cache the color map. While running
|
// TODO it may be worth while to cache the color map. While running
|
||||||
// testing I never hit a cache so I will leave that out for now (perhaps
|
// testing I never hit a cache so I will leave that out for now (perhaps
|
||||||
// we are reparsing colorspaces too much?).
|
// we are reparsing colorspaces too much?).
|
||||||
var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) :
|
let allColors = bpc <= 8 ? new Uint8Array(numComponentColors) :
|
||||||
new Uint16Array(numComponentColors);
|
new Uint16Array(numComponentColors);
|
||||||
for (let i = 0; i < numComponentColors; i++) {
|
for (let i = 0; i < numComponentColors; i++) {
|
||||||
allColors[i] = i;
|
allColors[i] = i;
|
||||||
}
|
}
|
||||||
var colorMap = new Uint8ClampedArray(numComponentColors * 3);
|
let colorMap = new Uint8ClampedArray(numComponentColors * 3);
|
||||||
this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc,
|
this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc,
|
||||||
/* alpha01 = */ 0);
|
/* alpha01 = */ 0);
|
||||||
|
|
||||||
@ -210,8 +210,8 @@ class ColorSpace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static fromIR(IR) {
|
static fromIR(IR) {
|
||||||
var name = Array.isArray(IR) ? IR[0] : IR;
|
let name = Array.isArray(IR) ? IR[0] : IR;
|
||||||
var whitePoint, blackPoint, gamma;
|
let whitePoint, blackPoint, gamma;
|
||||||
|
|
||||||
switch (name) {
|
switch (name) {
|
||||||
case 'DeviceGrayCS':
|
case 'DeviceGrayCS':
|
||||||
@ -229,28 +229,28 @@ class ColorSpace {
|
|||||||
whitePoint = IR[1];
|
whitePoint = IR[1];
|
||||||
blackPoint = IR[2];
|
blackPoint = IR[2];
|
||||||
gamma = IR[3];
|
gamma = IR[3];
|
||||||
var matrix = IR[4];
|
let matrix = IR[4];
|
||||||
return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);
|
return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);
|
||||||
case 'PatternCS':
|
case 'PatternCS':
|
||||||
var basePatternCS = IR[1];
|
let basePatternCS = IR[1];
|
||||||
if (basePatternCS) {
|
if (basePatternCS) {
|
||||||
basePatternCS = this.fromIR(basePatternCS);
|
basePatternCS = this.fromIR(basePatternCS);
|
||||||
}
|
}
|
||||||
return new PatternCS(basePatternCS);
|
return new PatternCS(basePatternCS);
|
||||||
case 'IndexedCS':
|
case 'IndexedCS':
|
||||||
var baseIndexedCS = IR[1];
|
let baseIndexedCS = IR[1];
|
||||||
var hiVal = IR[2];
|
let hiVal = IR[2];
|
||||||
var lookup = IR[3];
|
let lookup = IR[3];
|
||||||
return new IndexedCS(this.fromIR(baseIndexedCS), hiVal, lookup);
|
return new IndexedCS(this.fromIR(baseIndexedCS), hiVal, lookup);
|
||||||
case 'AlternateCS':
|
case 'AlternateCS':
|
||||||
var numComps = IR[1];
|
let numComps = IR[1];
|
||||||
var alt = IR[2];
|
let alt = IR[2];
|
||||||
var tintFn = IR[3];
|
let tintFn = IR[3];
|
||||||
return new AlternateCS(numComps, this.fromIR(alt), tintFn);
|
return new AlternateCS(numComps, this.fromIR(alt), tintFn);
|
||||||
case 'LabCS':
|
case 'LabCS':
|
||||||
whitePoint = IR[1];
|
whitePoint = IR[1];
|
||||||
blackPoint = IR[2];
|
blackPoint = IR[2];
|
||||||
var range = IR[3];
|
let range = IR[3];
|
||||||
return new LabCS(whitePoint, blackPoint, range);
|
return new LabCS(whitePoint, blackPoint, range);
|
||||||
default:
|
default:
|
||||||
throw new FormatError(`Unknown colorspace name: ${name}`);
|
throw new FormatError(`Unknown colorspace name: ${name}`);
|
||||||
@ -290,8 +290,8 @@ class ColorSpace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Array.isArray(cs)) {
|
if (Array.isArray(cs)) {
|
||||||
var mode = xref.fetchIfRef(cs[0]).name;
|
let mode = xref.fetchIfRef(cs[0]).name;
|
||||||
var numComps, params, alt, whitePoint, blackPoint, gamma;
|
let numComps, params, alt, whitePoint, blackPoint, gamma;
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 'DeviceGray':
|
case 'DeviceGray':
|
||||||
@ -314,18 +314,18 @@ class ColorSpace {
|
|||||||
whitePoint = params.getArray('WhitePoint');
|
whitePoint = params.getArray('WhitePoint');
|
||||||
blackPoint = params.getArray('BlackPoint');
|
blackPoint = params.getArray('BlackPoint');
|
||||||
gamma = params.getArray('Gamma');
|
gamma = params.getArray('Gamma');
|
||||||
var matrix = params.getArray('Matrix');
|
let matrix = params.getArray('Matrix');
|
||||||
return ['CalRGBCS', whitePoint, blackPoint, gamma, matrix];
|
return ['CalRGBCS', whitePoint, blackPoint, gamma, matrix];
|
||||||
case 'ICCBased':
|
case 'ICCBased':
|
||||||
var stream = xref.fetchIfRef(cs[1]);
|
let stream = xref.fetchIfRef(cs[1]);
|
||||||
var dict = stream.dict;
|
let dict = stream.dict;
|
||||||
numComps = dict.get('N');
|
numComps = dict.get('N');
|
||||||
alt = dict.get('Alternate');
|
alt = dict.get('Alternate');
|
||||||
if (alt) {
|
if (alt) {
|
||||||
var altIR = this.parseToIR(alt, xref, res, pdfFunctionFactory);
|
let altIR = this.parseToIR(alt, xref, res, pdfFunctionFactory);
|
||||||
// Parse the /Alternate CS to ensure that the number of components
|
// Parse the /Alternate CS to ensure that the number of components
|
||||||
// are correct, and also (indirectly) that it is not a PatternCS.
|
// are correct, and also (indirectly) that it is not a PatternCS.
|
||||||
var altCS = this.fromIR(altIR, pdfFunctionFactory);
|
let altCS = this.fromIR(altIR, pdfFunctionFactory);
|
||||||
if (altCS.numComps === numComps) {
|
if (altCS.numComps === numComps) {
|
||||||
return altIR;
|
return altIR;
|
||||||
}
|
}
|
||||||
@ -340,7 +340,7 @@ class ColorSpace {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'Pattern':
|
case 'Pattern':
|
||||||
var basePatternCS = cs[1] || null;
|
let basePatternCS = cs[1] || null;
|
||||||
if (basePatternCS) {
|
if (basePatternCS) {
|
||||||
basePatternCS = this.parseToIR(basePatternCS, xref, res,
|
basePatternCS = this.parseToIR(basePatternCS, xref, res,
|
||||||
pdfFunctionFactory);
|
pdfFunctionFactory);
|
||||||
@ -348,17 +348,17 @@ class ColorSpace {
|
|||||||
return ['PatternCS', basePatternCS];
|
return ['PatternCS', basePatternCS];
|
||||||
case 'Indexed':
|
case 'Indexed':
|
||||||
case 'I':
|
case 'I':
|
||||||
var baseIndexedCS = this.parseToIR(cs[1], xref, res,
|
let baseIndexedCS = this.parseToIR(cs[1], xref, res,
|
||||||
pdfFunctionFactory);
|
pdfFunctionFactory);
|
||||||
var hiVal = xref.fetchIfRef(cs[2]) + 1;
|
let hiVal = xref.fetchIfRef(cs[2]) + 1;
|
||||||
var lookup = xref.fetchIfRef(cs[3]);
|
let lookup = xref.fetchIfRef(cs[3]);
|
||||||
if (isStream(lookup)) {
|
if (isStream(lookup)) {
|
||||||
lookup = lookup.getBytes();
|
lookup = lookup.getBytes();
|
||||||
}
|
}
|
||||||
return ['IndexedCS', baseIndexedCS, hiVal, lookup];
|
return ['IndexedCS', baseIndexedCS, hiVal, lookup];
|
||||||
case 'Separation':
|
case 'Separation':
|
||||||
case 'DeviceN':
|
case 'DeviceN':
|
||||||
var name = xref.fetchIfRef(cs[1]);
|
let name = xref.fetchIfRef(cs[1]);
|
||||||
numComps = Array.isArray(name) ? name.length : 1;
|
numComps = Array.isArray(name) ? name.length : 1;
|
||||||
alt = this.parseToIR(cs[2], xref, res, pdfFunctionFactory);
|
alt = this.parseToIR(cs[2], xref, res, pdfFunctionFactory);
|
||||||
let tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3]));
|
let tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3]));
|
||||||
@ -367,7 +367,7 @@ class ColorSpace {
|
|||||||
params = xref.fetchIfRef(cs[1]);
|
params = xref.fetchIfRef(cs[1]);
|
||||||
whitePoint = params.getArray('WhitePoint');
|
whitePoint = params.getArray('WhitePoint');
|
||||||
blackPoint = params.getArray('BlackPoint');
|
blackPoint = params.getArray('BlackPoint');
|
||||||
var range = params.getArray('Range');
|
let range = params.getArray('Range');
|
||||||
return ['LabCS', whitePoint, blackPoint, range];
|
return ['LabCS', whitePoint, blackPoint, range];
|
||||||
default:
|
default:
|
||||||
throw new FormatError(`unimplemented color space object "${mode}"`);
|
throw new FormatError(`unimplemented color space object "${mode}"`);
|
||||||
@ -394,7 +394,7 @@ class ColorSpace {
|
|||||||
warn('The decode map is not the correct length');
|
warn('The decode map is not the correct length');
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
for (var i = 0, ii = decode.length; i < ii; i += 2) {
|
for (let i = 0, ii = decode.length; i < ii; i += 2) {
|
||||||
if (decode[i] !== 0 || decode[i + 1] !== 1) {
|
if (decode[i] !== 0 || decode[i + 1] !== 1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -439,7 +439,7 @@ class AlternateCS extends ColorSpace {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'AlternateCS.getRgbItem: Unsupported "dest" type.');
|
'AlternateCS.getRgbItem: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var tmpBuf = this.tmpBuf;
|
let tmpBuf = this.tmpBuf;
|
||||||
this.tintFn(src, srcOffset, tmpBuf, 0);
|
this.tintFn(src, srcOffset, tmpBuf, 0);
|
||||||
this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
|
this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
|
||||||
}
|
}
|
||||||
@ -450,21 +450,21 @@ class AlternateCS extends ColorSpace {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'AlternateCS.getRgbBuffer: Unsupported "dest" type.');
|
'AlternateCS.getRgbBuffer: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var tintFn = this.tintFn;
|
let tintFn = this.tintFn;
|
||||||
var base = this.base;
|
let base = this.base;
|
||||||
var scale = 1 / ((1 << bits) - 1);
|
let scale = 1 / ((1 << bits) - 1);
|
||||||
var baseNumComps = base.numComps;
|
let baseNumComps = base.numComps;
|
||||||
var usesZeroToOneRange = base.usesZeroToOneRange;
|
let usesZeroToOneRange = base.usesZeroToOneRange;
|
||||||
var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) &&
|
let isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) &&
|
||||||
alpha01 === 0;
|
alpha01 === 0;
|
||||||
var pos = isPassthrough ? destOffset : 0;
|
let pos = isPassthrough ? destOffset : 0;
|
||||||
let baseBuf = isPassthrough ?
|
let baseBuf = isPassthrough ?
|
||||||
dest : new Uint8ClampedArray(baseNumComps * count);
|
dest : new Uint8ClampedArray(baseNumComps * count);
|
||||||
var numComps = this.numComps;
|
let numComps = this.numComps;
|
||||||
|
|
||||||
var scaled = new Float32Array(numComps);
|
let scaled = new Float32Array(numComps);
|
||||||
var tinted = new Float32Array(baseNumComps);
|
let tinted = new Float32Array(baseNumComps);
|
||||||
var i, j;
|
let i, j;
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
for (j = 0; j < numComps; j++) {
|
for (j = 0; j < numComps; j++) {
|
||||||
@ -513,16 +513,16 @@ class IndexedCS extends ColorSpace {
|
|||||||
this.base = base;
|
this.base = base;
|
||||||
this.highVal = highVal;
|
this.highVal = highVal;
|
||||||
|
|
||||||
var baseNumComps = base.numComps;
|
let baseNumComps = base.numComps;
|
||||||
var length = baseNumComps * highVal;
|
let length = baseNumComps * highVal;
|
||||||
|
|
||||||
if (isStream(lookup)) {
|
if (isStream(lookup)) {
|
||||||
this.lookup = new Uint8Array(length);
|
this.lookup = new Uint8Array(length);
|
||||||
var bytes = lookup.getBytes(length);
|
let bytes = lookup.getBytes(length);
|
||||||
this.lookup.set(bytes);
|
this.lookup.set(bytes);
|
||||||
} else if (isString(lookup)) {
|
} else if (isString(lookup)) {
|
||||||
this.lookup = new Uint8Array(length);
|
this.lookup = new Uint8Array(length);
|
||||||
for (var i = 0; i < length; ++i) {
|
for (let i = 0; i < length; ++i) {
|
||||||
this.lookup[i] = lookup.charCodeAt(i);
|
this.lookup[i] = lookup.charCodeAt(i);
|
||||||
}
|
}
|
||||||
} else if (lookup instanceof Uint8Array) {
|
} else if (lookup instanceof Uint8Array) {
|
||||||
@ -538,8 +538,8 @@ class IndexedCS extends ColorSpace {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'IndexedCS.getRgbItem: Unsupported "dest" type.');
|
'IndexedCS.getRgbItem: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var numComps = this.base.numComps;
|
let numComps = this.base.numComps;
|
||||||
var start = src[srcOffset] * numComps;
|
let start = src[srcOffset] * numComps;
|
||||||
this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);
|
this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -549,13 +549,13 @@ class IndexedCS extends ColorSpace {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'IndexedCS.getRgbBuffer: Unsupported "dest" type.');
|
'IndexedCS.getRgbBuffer: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var base = this.base;
|
let base = this.base;
|
||||||
var numComps = base.numComps;
|
let numComps = base.numComps;
|
||||||
var outputDelta = base.getOutputLength(numComps, alpha01);
|
let outputDelta = base.getOutputLength(numComps, alpha01);
|
||||||
var lookup = this.lookup;
|
let lookup = this.lookup;
|
||||||
|
|
||||||
for (var i = 0; i < count; ++i) {
|
for (let i = 0; i < count; ++i) {
|
||||||
var lookupPos = src[srcOffset++] * numComps;
|
let lookupPos = src[srcOffset++] * numComps;
|
||||||
base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
|
base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
|
||||||
destOffset += outputDelta;
|
destOffset += outputDelta;
|
||||||
}
|
}
|
||||||
@ -594,9 +594,9 @@ class DeviceGrayCS extends ColorSpace {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'DeviceGrayCS.getRgbBuffer: Unsupported "dest" type.');
|
'DeviceGrayCS.getRgbBuffer: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var scale = 255 / ((1 << bits) - 1);
|
let scale = 255 / ((1 << bits) - 1);
|
||||||
var j = srcOffset, q = destOffset;
|
let j = srcOffset, q = destOffset;
|
||||||
for (var i = 0; i < count; ++i) {
|
for (let i = 0; i < count; ++i) {
|
||||||
let c = scale * src[j++];
|
let c = scale * src[j++];
|
||||||
dest[q++] = c;
|
dest[q++] = c;
|
||||||
dest[q++] = c;
|
dest[q++] = c;
|
||||||
@ -643,9 +643,9 @@ class DeviceRgbCS extends ColorSpace {
|
|||||||
dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);
|
dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var scale = 255 / ((1 << bits) - 1);
|
let scale = 255 / ((1 << bits) - 1);
|
||||||
var j = srcOffset, q = destOffset;
|
let j = srcOffset, q = destOffset;
|
||||||
for (var i = 0; i < count; ++i) {
|
for (let i = 0; i < count; ++i) {
|
||||||
dest[q++] = scale * src[j++];
|
dest[q++] = scale * src[j++];
|
||||||
dest[q++] = scale * src[j++];
|
dest[q++] = scale * src[j++];
|
||||||
dest[q++] = scale * src[j++];
|
dest[q++] = scale * src[j++];
|
||||||
@ -677,10 +677,10 @@ const DeviceCmykCS = (function DeviceCmykCSClosure() {
|
|||||||
// CMYK color conversion using the estimation below:
|
// CMYK color conversion using the estimation below:
|
||||||
// f(A, B,.. N) = Acc+Bcm+Ccy+Dck+c+Fmm+Gmy+Hmk+Im+Jyy+Kyk+Ly+Mkk+Nk+255
|
// f(A, B,.. N) = Acc+Bcm+Ccy+Dck+c+Fmm+Gmy+Hmk+Im+Jyy+Kyk+Ly+Mkk+Nk+255
|
||||||
function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {
|
function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {
|
||||||
var c = src[srcOffset] * srcScale;
|
let c = src[srcOffset] * srcScale;
|
||||||
var m = src[srcOffset + 1] * srcScale;
|
let m = src[srcOffset + 1] * srcScale;
|
||||||
var y = src[srcOffset + 2] * srcScale;
|
let y = src[srcOffset + 2] * srcScale;
|
||||||
var k = src[srcOffset + 3] * srcScale;
|
let k = src[srcOffset + 3] * srcScale;
|
||||||
|
|
||||||
dest[destOffset] = 255 +
|
dest[destOffset] = 255 +
|
||||||
c * (-4.387332384609988 * c + 54.48615194189176 * m +
|
c * (-4.387332384609988 * c + 54.48615194189176 * m +
|
||||||
@ -732,8 +732,8 @@ const DeviceCmykCS = (function DeviceCmykCSClosure() {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'DeviceCmykCS.getRgbBuffer: Unsupported "dest" type.');
|
'DeviceCmykCS.getRgbBuffer: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var scale = 1 / ((1 << bits) - 1);
|
let scale = 1 / ((1 << bits) - 1);
|
||||||
for (var i = 0; i < count; i++) {
|
for (let i = 0; i < count; i++) {
|
||||||
convertToRgb(src, srcOffset, scale, dest, destOffset);
|
convertToRgb(src, srcOffset, scale, dest, destOffset);
|
||||||
srcOffset += 4;
|
srcOffset += 4;
|
||||||
destOffset += 3 + alpha01;
|
destOffset += 3 + alpha01;
|
||||||
@ -760,12 +760,12 @@ const CalGrayCS = (function CalGrayCSClosure() {
|
|||||||
function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
|
function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
|
||||||
// A represents a gray component of a calibrated gray space.
|
// A represents a gray component of a calibrated gray space.
|
||||||
// A <---> AG in the spec
|
// A <---> AG in the spec
|
||||||
var A = src[srcOffset] * scale;
|
let A = src[srcOffset] * scale;
|
||||||
var AG = Math.pow(A, cs.G);
|
let AG = Math.pow(A, cs.G);
|
||||||
|
|
||||||
// Computes L as per spec. ( = cs.YW * AG )
|
// Computes L as per spec. ( = cs.YW * AG )
|
||||||
// Except if other than default BlackPoint values are used.
|
// Except if other than default BlackPoint values are used.
|
||||||
var L = cs.YW * AG;
|
let L = cs.YW * AG;
|
||||||
// http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html, Ch 4.
|
// http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html, Ch 4.
|
||||||
// Convert values to rgb range [0, 255].
|
// Convert values to rgb range [0, 255].
|
||||||
let val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0);
|
let val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0);
|
||||||
@ -834,9 +834,9 @@ const CalGrayCS = (function CalGrayCSClosure() {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'CalGrayCS.getRgbBuffer: Unsupported "dest" type.');
|
'CalGrayCS.getRgbBuffer: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var scale = 1 / ((1 << bits) - 1);
|
let scale = 1 / ((1 << bits) - 1);
|
||||||
|
|
||||||
for (var i = 0; i < count; ++i) {
|
for (let i = 0; i < count; ++i) {
|
||||||
convertToRgb(this, src, srcOffset, dest, destOffset, scale);
|
convertToRgb(this, src, srcOffset, dest, destOffset, scale);
|
||||||
srcOffset += 1;
|
srcOffset += 1;
|
||||||
destOffset += 3 + alpha01;
|
destOffset += 3 + alpha01;
|
||||||
@ -862,29 +862,29 @@ const CalGrayCS = (function CalGrayCSClosure() {
|
|||||||
const CalRGBCS = (function CalRGBCSClosure() {
|
const CalRGBCS = (function CalRGBCSClosure() {
|
||||||
// See http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html for these
|
// See http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html for these
|
||||||
// matrices.
|
// matrices.
|
||||||
var BRADFORD_SCALE_MATRIX = new Float32Array([
|
const BRADFORD_SCALE_MATRIX = new Float32Array([
|
||||||
0.8951, 0.2664, -0.1614,
|
0.8951, 0.2664, -0.1614,
|
||||||
-0.7502, 1.7135, 0.0367,
|
-0.7502, 1.7135, 0.0367,
|
||||||
0.0389, -0.0685, 1.0296]);
|
0.0389, -0.0685, 1.0296]);
|
||||||
|
|
||||||
var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([
|
const BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([
|
||||||
0.9869929, -0.1470543, 0.1599627,
|
0.9869929, -0.1470543, 0.1599627,
|
||||||
0.4323053, 0.5183603, 0.0492912,
|
0.4323053, 0.5183603, 0.0492912,
|
||||||
-0.0085287, 0.0400428, 0.9684867]);
|
-0.0085287, 0.0400428, 0.9684867]);
|
||||||
|
|
||||||
// See http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html.
|
// See http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html.
|
||||||
var SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([
|
const SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([
|
||||||
3.2404542, -1.5371385, -0.4985314,
|
3.2404542, -1.5371385, -0.4985314,
|
||||||
-0.9692660, 1.8760108, 0.0415560,
|
-0.9692660, 1.8760108, 0.0415560,
|
||||||
0.0556434, -0.2040259, 1.0572252]);
|
0.0556434, -0.2040259, 1.0572252]);
|
||||||
|
|
||||||
var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);
|
const FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);
|
||||||
|
|
||||||
var tempNormalizeMatrix = new Float32Array(3);
|
let tempNormalizeMatrix = new Float32Array(3);
|
||||||
var tempConvertMatrix1 = new Float32Array(3);
|
let tempConvertMatrix1 = new Float32Array(3);
|
||||||
var tempConvertMatrix2 = new Float32Array(3);
|
let tempConvertMatrix2 = new Float32Array(3);
|
||||||
|
|
||||||
var DECODE_L_CONSTANT = Math.pow(((8 + 16) / 116), 3) / 8.0;
|
const DECODE_L_CONSTANT = Math.pow(((8 + 16) / 116), 3) / 8.0;
|
||||||
|
|
||||||
function matrixProduct(a, b, result) {
|
function matrixProduct(a, b, result) {
|
||||||
result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
||||||
@ -899,9 +899,9 @@ const CalRGBCS = (function CalRGBCSClosure() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function convertToD65(sourceWhitePoint, LMS, result) {
|
function convertToD65(sourceWhitePoint, LMS, result) {
|
||||||
var D65X = 0.95047;
|
const D65X = 0.95047;
|
||||||
var D65Y = 1;
|
const D65Y = 1;
|
||||||
var D65Z = 1.08883;
|
const D65Z = 1.08883;
|
||||||
|
|
||||||
result[0] = LMS[0] * D65X / sourceWhitePoint[0];
|
result[0] = LMS[0] * D65X / sourceWhitePoint[0];
|
||||||
result[1] = LMS[1] * D65Y / sourceWhitePoint[1];
|
result[1] = LMS[1] * D65Y / sourceWhitePoint[1];
|
||||||
@ -945,25 +945,25 @@ const CalRGBCS = (function CalRGBCSClosure() {
|
|||||||
// http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
|
// http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
|
||||||
// AdobeBPC.pdf.
|
// AdobeBPC.pdf.
|
||||||
// The destination blackPoint is the default blackPoint [0, 0, 0].
|
// The destination blackPoint is the default blackPoint [0, 0, 0].
|
||||||
var zeroDecodeL = decodeL(0);
|
let zeroDecodeL = decodeL(0);
|
||||||
|
|
||||||
var X_DST = zeroDecodeL;
|
let X_DST = zeroDecodeL;
|
||||||
var X_SRC = decodeL(sourceBlackPoint[0]);
|
let X_SRC = decodeL(sourceBlackPoint[0]);
|
||||||
|
|
||||||
var Y_DST = zeroDecodeL;
|
let Y_DST = zeroDecodeL;
|
||||||
var Y_SRC = decodeL(sourceBlackPoint[1]);
|
let Y_SRC = decodeL(sourceBlackPoint[1]);
|
||||||
|
|
||||||
var Z_DST = zeroDecodeL;
|
let Z_DST = zeroDecodeL;
|
||||||
var Z_SRC = decodeL(sourceBlackPoint[2]);
|
let Z_SRC = decodeL(sourceBlackPoint[2]);
|
||||||
|
|
||||||
var X_Scale = (1 - X_DST) / (1 - X_SRC);
|
let X_Scale = (1 - X_DST) / (1 - X_SRC);
|
||||||
var X_Offset = 1 - X_Scale;
|
let X_Offset = 1 - X_Scale;
|
||||||
|
|
||||||
var Y_Scale = (1 - Y_DST) / (1 - Y_SRC);
|
let Y_Scale = (1 - Y_DST) / (1 - Y_SRC);
|
||||||
var Y_Offset = 1 - Y_Scale;
|
let Y_Offset = 1 - Y_Scale;
|
||||||
|
|
||||||
var Z_Scale = (1 - Z_DST) / (1 - Z_SRC);
|
let Z_Scale = (1 - Z_DST) / (1 - Z_SRC);
|
||||||
var Z_Offset = 1 - Z_Scale;
|
let Z_Offset = 1 - Z_Scale;
|
||||||
|
|
||||||
result[0] = XYZ_Flat[0] * X_Scale + X_Offset;
|
result[0] = XYZ_Flat[0] * X_Scale + X_Offset;
|
||||||
result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;
|
result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;
|
||||||
@ -980,20 +980,20 @@ const CalRGBCS = (function CalRGBCSClosure() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var LMS = result;
|
let LMS = result;
|
||||||
matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
|
matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
|
||||||
|
|
||||||
var LMS_Flat = tempNormalizeMatrix;
|
let LMS_Flat = tempNormalizeMatrix;
|
||||||
convertToFlat(sourceWhitePoint, LMS, LMS_Flat);
|
convertToFlat(sourceWhitePoint, LMS, LMS_Flat);
|
||||||
|
|
||||||
matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);
|
matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {
|
function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {
|
||||||
var LMS = result;
|
let LMS = result;
|
||||||
matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
|
matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
|
||||||
|
|
||||||
var LMS_D65 = tempNormalizeMatrix;
|
let LMS_D65 = tempNormalizeMatrix;
|
||||||
convertToD65(sourceWhitePoint, LMS, LMS_D65);
|
convertToD65(sourceWhitePoint, LMS, LMS_D65);
|
||||||
|
|
||||||
matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);
|
matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);
|
||||||
@ -1002,41 +1002,41 @@ const CalRGBCS = (function CalRGBCSClosure() {
|
|||||||
function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
|
function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
|
||||||
// A, B and C represent a red, green and blue components of a calibrated
|
// A, B and C represent a red, green and blue components of a calibrated
|
||||||
// rgb space.
|
// rgb space.
|
||||||
var A = adjustToRange(0, 1, src[srcOffset] * scale);
|
let A = adjustToRange(0, 1, src[srcOffset] * scale);
|
||||||
var B = adjustToRange(0, 1, src[srcOffset + 1] * scale);
|
let B = adjustToRange(0, 1, src[srcOffset + 1] * scale);
|
||||||
var C = adjustToRange(0, 1, src[srcOffset + 2] * scale);
|
let C = adjustToRange(0, 1, src[srcOffset + 2] * scale);
|
||||||
|
|
||||||
// A <---> AGR in the spec
|
// A <---> AGR in the spec
|
||||||
// B <---> BGG in the spec
|
// B <---> BGG in the spec
|
||||||
// C <---> CGB in the spec
|
// C <---> CGB in the spec
|
||||||
var AGR = Math.pow(A, cs.GR);
|
let AGR = Math.pow(A, cs.GR);
|
||||||
var BGG = Math.pow(B, cs.GG);
|
let BGG = Math.pow(B, cs.GG);
|
||||||
var CGB = Math.pow(C, cs.GB);
|
let CGB = Math.pow(C, cs.GB);
|
||||||
|
|
||||||
// Computes intermediate variables L, M, N as per spec.
|
// Computes intermediate variables L, M, N as per spec.
|
||||||
// To decode X, Y, Z values map L, M, N directly to them.
|
// To decode X, Y, Z values map L, M, N directly to them.
|
||||||
var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
|
let X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
|
||||||
var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
|
let Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
|
||||||
var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
|
let Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
|
||||||
|
|
||||||
// The following calculations are based on this document:
|
// The following calculations are based on this document:
|
||||||
// http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
|
// http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
|
||||||
// AdobeBPC.pdf.
|
// AdobeBPC.pdf.
|
||||||
var XYZ = tempConvertMatrix1;
|
let XYZ = tempConvertMatrix1;
|
||||||
XYZ[0] = X;
|
XYZ[0] = X;
|
||||||
XYZ[1] = Y;
|
XYZ[1] = Y;
|
||||||
XYZ[2] = Z;
|
XYZ[2] = Z;
|
||||||
var XYZ_Flat = tempConvertMatrix2;
|
let XYZ_Flat = tempConvertMatrix2;
|
||||||
|
|
||||||
normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);
|
normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);
|
||||||
|
|
||||||
var XYZ_Black = tempConvertMatrix1;
|
let XYZ_Black = tempConvertMatrix1;
|
||||||
compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);
|
compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);
|
||||||
|
|
||||||
var XYZ_D65 = tempConvertMatrix2;
|
let XYZ_D65 = tempConvertMatrix2;
|
||||||
normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);
|
normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);
|
||||||
|
|
||||||
var SRGB = tempConvertMatrix1;
|
let SRGB = tempConvertMatrix1;
|
||||||
matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);
|
matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);
|
||||||
|
|
||||||
// Convert the values to rgb range [0, 255].
|
// Convert the values to rgb range [0, 255].
|
||||||
@ -1058,14 +1058,14 @@ const CalRGBCS = (function CalRGBCSClosure() {
|
|||||||
matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
|
matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
|
||||||
|
|
||||||
// Translate arguments to spec variables.
|
// Translate arguments to spec variables.
|
||||||
var XW = whitePoint[0];
|
let XW = whitePoint[0];
|
||||||
var YW = whitePoint[1];
|
let YW = whitePoint[1];
|
||||||
var ZW = whitePoint[2];
|
let ZW = whitePoint[2];
|
||||||
this.whitePoint = whitePoint;
|
this.whitePoint = whitePoint;
|
||||||
|
|
||||||
var XB = blackPoint[0];
|
let XB = blackPoint[0];
|
||||||
var YB = blackPoint[1];
|
let YB = blackPoint[1];
|
||||||
var ZB = blackPoint[2];
|
let ZB = blackPoint[2];
|
||||||
this.blackPoint = blackPoint;
|
this.blackPoint = blackPoint;
|
||||||
|
|
||||||
this.GR = gamma[0];
|
this.GR = gamma[0];
|
||||||
@ -1116,9 +1116,9 @@ const CalRGBCS = (function CalRGBCSClosure() {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'CalRGBCS.getRgbBuffer: Unsupported "dest" type.');
|
'CalRGBCS.getRgbBuffer: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var scale = 1 / ((1 << bits) - 1);
|
let scale = 1 / ((1 << bits) - 1);
|
||||||
|
|
||||||
for (var i = 0; i < count; ++i) {
|
for (let i = 0; i < count; ++i) {
|
||||||
convertToRgb(this, src, srcOffset, dest, destOffset, scale);
|
convertToRgb(this, src, srcOffset, dest, destOffset, scale);
|
||||||
srcOffset += 3;
|
srcOffset += 3;
|
||||||
destOffset += 3 + alpha01;
|
destOffset += 3 + alpha01;
|
||||||
@ -1144,7 +1144,7 @@ const CalRGBCS = (function CalRGBCSClosure() {
|
|||||||
const LabCS = (function LabCSClosure() {
|
const LabCS = (function LabCSClosure() {
|
||||||
// Function g(x) from spec
|
// Function g(x) from spec
|
||||||
function fn_g(x) {
|
function fn_g(x) {
|
||||||
var result;
|
let result;
|
||||||
if (x >= 6 / 29) {
|
if (x >= 6 / 29) {
|
||||||
result = x * x * x;
|
result = x * x * x;
|
||||||
} else {
|
} else {
|
||||||
@ -1165,9 +1165,9 @@ const LabCS = (function LabCSClosure() {
|
|||||||
// converting an image we have to map the values to the correct range given
|
// converting an image we have to map the values to the correct range given
|
||||||
// above.
|
// above.
|
||||||
// Ls,as,bs <---> L*,a*,b* in the spec
|
// Ls,as,bs <---> L*,a*,b* in the spec
|
||||||
var Ls = src[srcOffset];
|
let Ls = src[srcOffset];
|
||||||
var as = src[srcOffset + 1];
|
let as = src[srcOffset + 1];
|
||||||
var bs = src[srcOffset + 2];
|
let bs = src[srcOffset + 2];
|
||||||
if (maxVal !== false) {
|
if (maxVal !== false) {
|
||||||
Ls = decode(Ls, maxVal, 0, 100);
|
Ls = decode(Ls, maxVal, 0, 100);
|
||||||
as = decode(as, maxVal, cs.amin, cs.amax);
|
as = decode(as, maxVal, cs.amin, cs.amax);
|
||||||
@ -1179,15 +1179,15 @@ const LabCS = (function LabCSClosure() {
|
|||||||
bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs;
|
bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs;
|
||||||
|
|
||||||
// Computes intermediate variables X,Y,Z as per spec
|
// Computes intermediate variables X,Y,Z as per spec
|
||||||
var M = (Ls + 16) / 116;
|
let M = (Ls + 16) / 116;
|
||||||
var L = M + (as / 500);
|
let L = M + (as / 500);
|
||||||
var N = M - (bs / 200);
|
let N = M - (bs / 200);
|
||||||
|
|
||||||
var X = cs.XW * fn_g(L);
|
let X = cs.XW * fn_g(L);
|
||||||
var Y = cs.YW * fn_g(M);
|
let Y = cs.YW * fn_g(M);
|
||||||
var Z = cs.ZW * fn_g(N);
|
let Z = cs.ZW * fn_g(N);
|
||||||
|
|
||||||
var r, g, b;
|
let r, g, b;
|
||||||
// Using different conversions for D50 and D65 white points,
|
// Using different conversions for D50 and D65 white points,
|
||||||
// per http://www.color.org/srgb.pdf
|
// per http://www.color.org/srgb.pdf
|
||||||
if (cs.ZW < 1) {
|
if (cs.ZW < 1) {
|
||||||
@ -1268,8 +1268,8 @@ const LabCS = (function LabCSClosure() {
|
|||||||
assert(dest instanceof Uint8ClampedArray,
|
assert(dest instanceof Uint8ClampedArray,
|
||||||
'LabCS.getRgbBuffer: Unsupported "dest" type.');
|
'LabCS.getRgbBuffer: Unsupported "dest" type.');
|
||||||
}
|
}
|
||||||
var maxVal = (1 << bits) - 1;
|
let maxVal = (1 << bits) - 1;
|
||||||
for (var i = 0; i < count; i++) {
|
for (let i = 0; i < count; i++) {
|
||||||
convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);
|
convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);
|
||||||
srcOffset += 3;
|
srcOffset += 3;
|
||||||
destOffset += 3 + alpha01;
|
destOffset += 3 + alpha01;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user