ReadableTextColorByImage icon indicating copy to clipboard operation
ReadableTextColorByImage copied to clipboard

现在这个算法可能会有问题

Open lexrus opened this issue 10 years ago • 3 comments

重绘在一个像素里再判断颜色明暗,遇到下面这种图是什么结果?

rectangle 1 rectangle 2

更加科学的算法可以参考这个: https://github.com/indragiek/DominantColor

lexrus avatar Sep 23 '15 15:09 lexrus

如果只要提高文字可读性,可以不用 UILabel,据说现在 UILabel 底层是 WKWebView 实现,性能不好。改成自己把文字画出来,blendMode 用 kCGBlendModeDifference. https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html

lexrus avatar Sep 23 '15 15:09 lexrus

在图片上放文字,提高可读性的最常用方法是加一个渐变: bitmap rectangle 1 type something

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

后来也有这么做的: bitmap rectangle 1 type something

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

我现在的方法是,先把图片的平均色取出来,一般来说方法有两种:一种是高斯模糊到图片直径,最后得出一个颜色;另一种是把图片缩放成 1 x 1 的像素最后得出一个颜色。 得到平均色之后,就把 RGB 换成 HSB,判断 Brightness 是否大于 0.9,从而得出「图片整体是否白得离谱」,而这个「离谱值」我一开始是设成 0.75,经过测试自己相册里多张图片最后决定设成 0.9。但是依然还是未能 100% 地应付一切类型的图片或照片。

最好的方法还是把计算样本从文字本身的背后来截取,而不是整张。但是我不太会怎样取得文字后面的区域,所以就干脆整张来了。。

RayPS avatar Sep 23 '15 15:09 RayPS

这个 kCGBlendModeDifference 虽然方便,但是遇到不是纯色的图片也会显得很糟糕的

RayPS avatar Sep 23 '15 16:09 RayPS