现在这个算法可能会有问题
重绘在一个像素里再判断颜色明暗,遇到下面这种图是什么结果?

更加科学的算法可以参考这个: https://github.com/indragiek/DominantColor
如果只要提高文字可读性,可以不用 UILabel,据说现在 UILabel 底层是 WKWebView 实现,性能不好。改成自己把文字画出来,blendMode 用 kCGBlendModeDifference. https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html
在图片上放文字,提高可读性的最常用方法是加一个渐变:

但是有些时候会遇到颜色又浅图案又简单地图片,就会显得很邋遢:

后来也有这么做的:

但是挡住图片不太优雅,最后还是觉得这样最实际:

我现在的方法是,先把图片的平均色取出来,一般来说方法有两种:一种是高斯模糊到图片直径,最后得出一个颜色;另一种是把图片缩放成 1 x 1 的像素最后得出一个颜色。 得到平均色之后,就把 RGB 换成 HSB,判断 Brightness 是否大于 0.9,从而得出「图片整体是否白得离谱」,而这个「离谱值」我一开始是设成 0.75,经过测试自己相册里多张图片最后决定设成 0.9。但是依然还是未能 100% 地应付一切类型的图片或照片。
最好的方法还是把计算样本从文字本身的背后来截取,而不是整张。但是我不太会怎样取得文字后面的区域,所以就干脆整张来了。。
这个 kCGBlendModeDifference 虽然方便,但是遇到不是纯色的图片也会显得很糟糕的