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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 由于H.264等压缩算法都是在YUV的颜色空间上进行的,所有在进行压缩前,首先要进行颜色空间的转换。如果摄像头采集...
    眷卿三世阅读 14,637评论 2 6
  • 目 录 1 色彩是什么 1.1 光的属性 1.1.1 光谱光与混合光 1.1.2 紫外光与荧光 1.1.3 红外光...
    我是开水泡饭阅读 12,552评论 2 46
  • 什么是颜色 Wiki是这样说的:颜色或色彩是通过眼、脑和我们的生活经验所产生的一种对光的视觉效应。嗯,简单点说,颜...
    评评分分阅读 33,080评论 6 57
  • 常见颜色空间 color model & color space 我们每天说的RGB,这个称呼严格来讲应该归属于c...
    hopewang1001阅读 13,256评论 2 20
  • 读了朱自清先生的《儿女》,便想也写写我的儿子。 儿子两岁八个月了。我真正做父亲受累的日子,算上妻怀胎十月,却也不足...
    学为圣人阅读 1,527评论 1 2