/**
* Change canvas imgData value;
* @param data canvas imgData
* @param contrast img contrast
* @param thereshold contrast change step
* @param isGrayscale is Gray
*/
changeImgData(data = [], contrast = 40, thereshold = 25, isGrayscale=false) {
const factor = (255 + contrast) / (255.01 - contrast); //add .1 to avoid /0 error
const denominator = 1 / (1 - contrast / 255) - 1;
const setCV = cv => cv + (cv - thereshold) * denominator;
const setCTV = cv => cv + (cv - thereshold) * contrast / 255;
const getRGB = cv => factor * (cv - 128) + 128;
// Data array data-length.
const len = data?.length || 0;
// loop value to change cavans imgData;
for (let index = 0; index < len; index += 4) {
let R = getRGB(data[index]); //r value
let G = getRGB(data[index + 1]); //g value
let B = getRGB(data[index + 2]); //b value
if (index % 4 === 0) {
R = contrast ? setCV(R) : setCTV(R);
G = contrast ? setCV(G) : setCTV(G);
B = contrast ? setCV(B) : setCTV(B);
if (isGrayscale) {
R = G = B = Math.round((R + G + B) / 3);
data[index + 3] = 255;
}
data[index] = R;
data[index + 1] = G;
data[index + 2] = B;
}
}
}
Canvas提高图片对比度
于 2023-09-26 16:11:25 首次发布