Swift 3 做 Color 颜色深浅的判断

结论在最后~

为了提高产品视觉体验,今天做了一个需求,要根据颜色的深浅来自动变换文字的颜色

刚开始的时候我想拿 rbg 三个值的和来判断,我认为!因为白色黑色是两个极端,所以相加刚好能跟亮度关联起来的!

      var vRed: CGFloat = 0
      var vGreen: CGFloat = 0
      var vBlue: CGFloat = 0
      var vAlpha: CGFloat = 0
      tintColor.getRed(&vRed, green: &vGreen, blue: &vBlue, alpha: &vAlpha)
      if fontColor = (vRed+vGreen+vBlue) < 2 {
            //浅色
      } else {
            //深色
      }

我的两个颜色,50, 193, 255 跟 70, 190, 250,肉眼识别差不多的两个蓝色,一个是判断出来是深色,一个是浅色
以及我发现黄色 #FFFF00,通过这个判断也是深色!
但是黄色怎么看都不符合深色的规则

后来发现 RGB 其实是不适合处理这种情况的,后来查资料找到了 YUV 模式,所以将 RGB 转为 YUV 编码

其中「Y」刚好表示 明亮度

所以判断深浅只需要获得这个 Y 就可以了,找到的转换公式

  Y = 0.299R + 0.587G + 0.114B

Swift 上做值的处理,因为我 rgb 三个值的范围是 0 ~ 1,所以我的判断条件是:

  let yValue = 0.299 * vRed + 0.587 & vGreen + 0.114 * vBlue
  if yValue > 0.75 {
        //浅色
  } else {
        //深色
  }

Done.

你可能感兴趣的:(Swift 3 做 Color 颜色深浅的判断)