Skip to content

generatePalette ​

基于一个基础颜色,根据不同的色彩和谐理论(如单色、类似色、互补色等)生成一个颜色数组。

示例 ​

基本用法 ​

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

// 默认生成一个包含 5 种颜色的单色调色板(十六进制格式)
generatePalette('#3498db')
// => ['#1a5490', '#2980b9', '#3498db', '#5dade2', '#85c1e9'] // 示例输出

// 可以通过 count 控制颜色数量
generatePalette('#3498db', { type: 'monochromatic', count: 3 })
// => ['#1a5490', '#2980b9', '#5dade2'] // 示例输出

生成互补色调色板 ​

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

// 'complementary' 类型会生成色轮上相对的颜色
generatePalette('#ff0000', { type: 'complementary' })
// => 至少包含 '#ff0000' 和其互补色 '#00ffff'

// 可以指定生成更多数量的颜色,函数会自动调整明暗
generatePalette('#ff0000', { type: 'complementary', count: 4, includeBase: true })
// => ['#ff0000', '#00ffff', '#ff4d4d', '#00b3b3'] // 示例输出

生成类似色调色板 ​

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

// 'analogous' 类型会生成色轮上相邻的颜色,常用于创建柔和、自然的配色方案
generatePalette('#ff6b6b', { type: 'analogous', count: 3 })
// => ['#ff9933', '#ff6b6b', '#ff3d9e'] // 示例输出

移除基础颜色 ​

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

// 设置 includeBase: false 可以从结果中排除原始的基础颜色
generatePalette('#ff0000', { type: 'triadic', includeBase: false })
// => ['#00ff00', '#0000ff'] // 示例输出

签名与说明 ​

类型签名 ​

typescript
import type { Color } from '@esdora/color'

export interface PaletteOptions {
  /** 生成的颜色数量,默认为 5 */
  count?: number
  /** 调色板类型 */
  type?: 'monochromatic' | 'analogous' | 'complementary' | 'triadic' | 'tetradic' | 'split-complementary'
  /** 是否包含基础颜色,默认为 true */
  includeBase?: boolean
}

export function generatePalette(
  baseColor: string | Color,
  options?: PaletteOptions,
): string[] | null

参数说明 ​

参数类型描述必需
baseColorstring | Color基础颜色字符串或 Color 颜色对象(由 @esdora/color 透出),支持 HEX、RGB、HSL 等格式是
optionsPaletteOptions可选配置对象,用于控制生成数量、调色板类型以及是否包含基础颜色否
options.countnumber生成的颜色数量,默认值为 5(对部分调色板类型会被忽略,见下文注意事项)否
options.type字面量联合类型调色板类型:'monochromatic'、'analogous'、'complementary'、'triadic'、'tetradic'、'split-complementary'否
options.includeBaseboolean是否在结果中包含基础颜色本身,默认包含否

返回值 ​

  • 类型: string[] | null
  • 说明: 返回一个由十六进制颜色字符串组成的数组,每个元素都是以 '#' 开头的有效 HEX 颜色。
  • 特殊情况:
    • 当基础颜色无法解析或内部转换失败时,返回 null。
    • 对于部分调色板类型(如 triadic, tetradic, split-complementary),即使传入 count,返回数组长度仍然是固定的(分别为 3、4、3)。

泛型约束(如适用) ​

  • 本函数不使用泛型类型参数。

注意事项与边界情况 ​

  • 关于输出格式: 所有生成的颜色都将以十六进制字符串(如 #ffffff)的形式返回。
  • 关于默认行为: 如果不提供任何 options,函数将默认生成一个包含 5 种颜色的 monochromatic (单色) 调色板,并包含基础颜色。
  • 关于无效输入: 当 baseColor 参数为无效颜色字符串(如 'invalid-color')、空字符串、null 或无法解析的对象时,函数将返回 null。
  • 关于 count 选项:
    • 对于 triadic, tetradic, split-complementary 类型,count 选项无效,它们总是返回固定数量的颜色(分别为 3, 4, 3)。
    • 对于 monochromatic, analogous, complementary 类型,count 选项有效,用于控制最终生成的颜色数量。
  • 关于鲁棒性: 即使输入的颜色对象缺少 h, s, l 等属性(值为 undefined),函数也会使用默认值 0 来处理,确保不会因意外输入而崩溃。

输入边界 ​

  • 支持 HEX、RGB、HSL 字符串以及 HSL 颜色对象作为基础颜色。
  • 当基础颜色无法被解析为合法颜色时,函数返回 null。
  • 在单色调色板中,当基础颜色本身不在自动生成的序列中时,会将基础颜色插入后按亮度排序,并截取到指定的 count 长度。

错误处理 ​

  • 内部使用颜色解析和 HSL/HEX 转换工具,当解析或转换过程中出现异常时,会返回 null 而不是抛出错误。
  • 建议在调用方对返回值进行空值检查,并在必要时提供默认调色板或回退策略。

性能考虑 ​

  • 时间复杂度大致为 O(count),其中 count 为生成的颜色数量。
  • 在需要批量为大量基础颜色生成调色板的场景下,建议在业务层做结果缓存,避免对同一基础颜色反复调用。
  • 由于内部依赖颜色空间转换(HSL/HEX),在性能敏感路径中应避免在动画帧中频繁创建大规模调色板。

相关链接 ​

基于 MIT 许可证发布