Canvas提高图片对比度

/**
   * 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;
      }
    }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值