Skip to content

toHsl

将任意合法的颜色字符串或颜色对象转换为一个简化的 HSL 对象。

示例

基本用法

typescript
import { toHsl } from '@esdora/color'

toHsl('#FF0000') // => { h: 0, s: 100, l: 50 }
toHsl('rgb(0, 255, 0)') // => { h: 120, s: 100, l: 50 }

// 对于灰度颜色,色相 (h) 和饱和度 (s) 均为 0
toHsl('#808080') // => { h: 0, s: 0, l: 50 }

处理透明度

typescript
import { toHsl } from '@esdora/color'

// 当颜色包含透明度时,返回的对象会包含 a 属性
toHsl('rgba(255, 0, 0, 0.5)') // => { h: 0, s: 100, l: 50, a: 0.5 }

// 当颜色完全不透明 (alpha = 1) 时,则不包含 a 属性
toHsl('rgba(255, 0, 0, 1)') // => { h: 0, s: 100, l: 50 }

边界和错误场景

typescript
import { toHsl } from '@esdora/color'

toHsl('invalid-color') // => null
toHsl('') // => null

签名与说明

类型签名

typescript
export function toHsl(color: string | EsdoraColor): EsdoraHslColor | null

参数说明

参数类型描述必需
colorstring | EsdoraColor任意合法的颜色表示,可以是 HEX/RGB/HSL 等 CSS 颜色字符串,或 Culori 支持的颜色对象。

返回值

  • 类型: EsdoraHslColor | null
  • 说明: 当解析成功时,返回包含 hsl(以及可选的 a)属性的 HSL 颜色对象,数值范围为 h: 0-360s/l: 0-100
  • 特殊情况: 当颜色无法解析、转换失败或输入不合法(如无效字符串、nullundefined 等)时,返回 null

泛型约束(如适用)

本函数不使用泛型参数。

注意事项与边界情况

输入边界

  • 支持 HEX 短格式(如 #f00)和长格式(如 #FF0000)、RGB/HSL 字符串以及对应的颜色对象。
  • 对于灰度颜色(如 #808080#000000#FFFFFF),色相 h 固定为 0,饱和度 s0,亮度 l 取对应的灰度值。
  • 如果内部转换得到的 HSL 对象中某些分量为 undefined,会按 0 处理,以保证返回的对象始终具有完整的数值。

错误处理

  • 异常类型: 函数内部对 HSL 转换过程使用 try/catch 包裹,当底层转换器抛出错误(例如传入带有非法 mode 的颜色对象)时,统一返回 null
  • 处理建议: 调用方应先判断返回值是否为 null,再使用其中的 hsla 属性。无需在业务层额外包裹 try/catch

性能考虑

  • 时间复杂度: O(1) —— 每次调用仅对单个颜色值进行解析与坐标转换。
  • 空间复杂度: O(1) —— 只创建一个中间的 HSL 对象,不会随着调用次数累积额外内存。
  • 优化建议: 适合在颜色分析、调色板生成等场景中高频调用;若在大规模循环中使用,可将解析前的颜色字符串做去重或缓存,以减少重复解析。

相关链接

基于 MIT 许可证发布