V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
James369
V2EX  ›  iDev

求一个 iOS 的颜色处理库?

  •  
  •   James369 · 2021-10-07 11:55:18 +08:00 · 5498 次点击
    这是一个创建于 924 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主要想:
    1.给定一个颜色,可以让它变亮 /变暗。
    2.给定二个颜色,判断它们之间的相似程度,比如:玫红和洋红可以认为是同一个红色。

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

    但是第 1 步就不知道要怎么做?
    GreatEscape
        4
    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
        5
    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
        6
    James369  
    OP
       2021-10-08 14:36:39 +08:00
    @GreatEscape 恩,后来想想还有黑色 /白色要进行比较,Hue 还是不够。
    James369
        7
    James369  
    OP
       2021-10-08 14:38:30 +08:00
    @AlphaRobert 我也想能不能简单处理一下,太暗的归为黑色,太亮的归为白色,饱和度差的归为灰色。其它按照 Hue 归为相应的彩色。
    AlphaRobert
        8
    AlphaRobert  
       2021-10-08 15:02:59 +08:00   ❤️ 1
    @James369 如果只是判断两个颜色相不相似的话不如直接用 RGB 来算,直接算平方和就可以了
    James369
        9
    James369  
    OP
       2021-10-08 16:07:34 +08:00
    @AlphaRobert 妙,你是说把 rgb 直接映射到 xyz 三维空间,然后求空间距离,不错好简单的方法
    James369
        10
    James369  
    OP
       2021-10-08 18:13:36 +08:00
    #8 先简单这么做吧,但其实还是有些问题,因为 RGB 颜色空间是不均匀的,那么通过距离来判断还是存在误差。
    AlphaRobert
        11
    AlphaRobert  
       2021-10-08 22:28:22 +08:00   ❤️ 1
    @James369 其实是不存在最优解的……常用的哪一种模型的色彩空间都不均匀。颜色这种东西本身就玄乎,最简单的 Gamma 每个人的评判标准都不一样,sRGB 的 Gamma 为 2.2,但我实际感觉更像 1.8 。并且色彩的相似还要考虑环境光,像 #000 和 #111 、#fff 和 #eee 在深浅色背景下的感知区别都不一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1108 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:00 · PVG 07:00 · LAX 16:00 · JFK 19:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.