求一个 iOS 的颜色处理库?

2021-10-07 11:55:18 +08:00
 James369
主要想:
1.给定一个颜色,可以让它变亮 /变暗。
2.给定二个颜色,判断它们之间的相似程度,比如:玫红和洋红可以认为是同一个红色。

谢谢!
5671 次点击
所在节点    iDev
11 条回复
ryh
2021-10-07 13:10:58 +08:00
第一个需求 https://github.com/yannickl/DynamicColor
第二需求比较 HSL?
James369
2021-10-07 13:24:07 +08:00
@ryh 色度或者色相,不过具体算法怎么处理不大清楚
James369
2021-10-07 13:31:50 +08:00
关于第二个问题,颜色相似度比较,我初步设想一个方法:
1. 把所有颜色的色相信息均匀散布到一个圆环上。
2. 任给两个不同颜色,将对应圆环上的 2 个点。
3. 计算出这个 2 点之间的弧度差,越近则越相似。

但是第 1 步就不知道要怎么做?
GreatEscape
2021-10-08 11:57:07 +08:00
@James369 你说的第一步,不就是转换为 HSL 或 HSB,比较 Hue 值么? Hue 值本身就是以 0 - 360 度表示的。https://www.december.com/html/spec/colorhsl.html
AlphaRobert
2021-10-08 13:48:53 +08:00
UIColor

参见 uiColor.getHue(_:saturation:brightness:alpha:) /* 这个 API 都没有被 Swiftified */ 和 UIColor(hue:saturation:brightness:alpha:)

1. 保持 hue 和 saturation 相同,调 brightness 。不过具体的变亮 /变暗方法有很多种,包括但不限于调 brightness 、plus lighter/darker 、直接跟白色 /黑色混合。
2. 判断 hue 之间的差值,必要时再判断 saturation 和 brightness 。但注意 HSB 和 HSL 模型的区别,两者的 S 也不尽相同

如果要自己写的话,HSB 和 HSL 算法都很简单
James369
2021-10-08 14:36:39 +08:00
@GreatEscape 恩,后来想想还有黑色 /白色要进行比较,Hue 还是不够。
James369
2021-10-08 14:38:30 +08:00
@AlphaRobert 我也想能不能简单处理一下,太暗的归为黑色,太亮的归为白色,饱和度差的归为灰色。其它按照 Hue 归为相应的彩色。
AlphaRobert
2021-10-08 15:02:59 +08:00
@James369 如果只是判断两个颜色相不相似的话不如直接用 RGB 来算,直接算平方和就可以了
James369
2021-10-08 16:07:34 +08:00
@AlphaRobert 妙,你是说把 rgb 直接映射到 xyz 三维空间,然后求空间距离,不错好简单的方法
James369
2021-10-08 18:13:36 +08:00
#8 先简单这么做吧,但其实还是有些问题,因为 RGB 颜色空间是不均匀的,那么通过距离来判断还是存在误差。
AlphaRobert
2021-10-08 22:28:22 +08:00
@James369 其实是不存在最优解的……常用的哪一种模型的色彩空间都不均匀。颜色这种东西本身就玄乎,最简单的 Gamma 每个人的评判标准都不一样,sRGB 的 Gamma 为 2.2,但我实际感觉更像 1.8 。并且色彩的相似还要考虑环境光,像 #000 和 #111 、#fff 和 #eee 在深浅色背景下的感知区别都不一样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/806200

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX