@aviala-design/color 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.zh-CN.md +161 -59
- package/package.json +1 -1
package/README.zh-CN.md
CHANGED
|
@@ -1,90 +1,192 @@
|
|
|
1
1
|
# ArcoDesign Color
|
|
2
2
|
|
|
3
|
-
ArcoDesign Color Utils
|
|
3
|
+
ArcoDesign Color Utils - 一个强大的颜色处理工具库。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## 功能概述
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
本库提供两大核心功能:
|
|
8
|
+
|
|
9
|
+
1. **色盘生成**:根据给定颜色通过算法生成包含十个颜色的梯度色板,支持亮色模式和暗色模式。
|
|
10
|
+
2. **图片取色**:从图片中提取主色调,可用于生成与图片匹配的调色板或主题色。
|
|
11
|
+
|
|
12
|
+
## 安装
|
|
8
13
|
|
|
9
14
|
```bash
|
|
10
|
-
npm
|
|
11
|
-
|
|
15
|
+
npm install @aviala-design/color```
|
|
16
|
+
|
|
17
|
+
## 基本使用
|
|
12
18
|
|
|
13
19
|
```js
|
|
14
|
-
import { generate,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
console.log(
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
//
|
|
29
|
-
// arcoblue: {...},
|
|
30
|
-
// purple: {...},
|
|
31
|
-
// pinkpurple: {...},
|
|
32
|
-
// magenta: {...},
|
|
33
|
-
// gray: {...}
|
|
34
|
-
// }
|
|
20
|
+
import { generate, getPresetColors, getRgbStr, extractColorFromImage } from '@arco-design/color';
|
|
21
|
+
|
|
22
|
+
// 生成色盘
|
|
23
|
+
const colorPalette = generate('#3491FA', { list: true });
|
|
24
|
+
console.log(colorPalette); // 返回包含10个颜色的数组
|
|
25
|
+
|
|
26
|
+
// 使用预设颜色
|
|
27
|
+
const { red, blue, arcoblue } = getPresetColors();
|
|
28
|
+
console.log(red.light); // 亮色模式下的红色色盘
|
|
29
|
+
console.log(blue.dark); // 暗色模式下的蓝色色盘
|
|
30
|
+
console.log(arcoblue.primary); // arco蓝的主色
|
|
31
|
+
|
|
32
|
+
// 获取RGB字符串
|
|
33
|
+
const rgbStr = getRgbStr('#F53F3F');
|
|
34
|
+
console.log(rgbStr); // 245,63,63
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
## API
|
|
37
|
+
## API 详解
|
|
38
|
+
|
|
39
|
+
### 色盘生成功能
|
|
40
|
+
|
|
41
|
+
#### generate(color: string, options?: Object)
|
|
38
42
|
|
|
39
|
-
|
|
43
|
+
基于基础颜色生成色盘。
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
**参数:**
|
|
46
|
+
- `color`: string - 基础颜色,支持十六进制格式(如 '#FF5733')
|
|
47
|
+
- `options`: Object - 可选配置项
|
|
48
|
+
- `index`: number - 指定返回色盘中的第几个颜色,范围1-10,默认为6(基础颜色)
|
|
49
|
+
- `dark`: boolean - 是否生成暗色模式的色盘,默认为false
|
|
50
|
+
- `list`: boolean - 是否返回完整色盘列表,默认为false
|
|
51
|
+
- `format`: string - 返回颜色的格式,可选值:'hex'(默认)、'rgb'、'hsl'
|
|
42
52
|
|
|
43
|
-
|
|
53
|
+
**返回值:**
|
|
54
|
+
- 当 `list` 为 true 时,返回 `string[]` - 包含10个颜色的数组
|
|
55
|
+
- 当 `list` 为 false 时,返回 `string` - 指定索引位置的单个颜色
|
|
44
56
|
|
|
45
|
-
|
|
57
|
+
**示例:**
|
|
46
58
|
|
|
47
|
-
|
|
59
|
+
```js
|
|
60
|
+
// 生成单个颜色
|
|
61
|
+
const baseColor = '#3491FA';
|
|
62
|
+
const color = generate(baseColor); // 返回基础颜色本身
|
|
48
63
|
|
|
49
|
-
|
|
64
|
+
// 生成亮色模式下的第3个颜色
|
|
65
|
+
const lightColor = generate(baseColor, { index: 3 });
|
|
50
66
|
|
|
51
|
-
|
|
67
|
+
// 生成暗色模式下的色盘
|
|
68
|
+
const darkPalette = generate(baseColor, { dark: true, list: true });
|
|
52
69
|
|
|
53
|
-
|
|
70
|
+
// 以RGB格式返回颜色
|
|
71
|
+
const rgbColor = generate(baseColor, { format: 'rgb' });
|
|
72
|
+
```
|
|
54
73
|
|
|
55
|
-
|
|
74
|
+
#### getPresetColors()
|
|
75
|
+
|
|
76
|
+
获取预设的14组颜色,包括一组中性灰。
|
|
77
|
+
|
|
78
|
+
**返回值:**
|
|
79
|
+
包含以下颜色的对象:
|
|
80
|
+
* `red` - 红色
|
|
81
|
+
* `orangered` - 橙红色
|
|
82
|
+
* `orange` - 橙色
|
|
83
|
+
* `gold` - 金色
|
|
84
|
+
* `yellow` - 黄色
|
|
85
|
+
* `lime` - 青柠色
|
|
86
|
+
* `green` - 绿色
|
|
87
|
+
* `cyan` - 青色
|
|
88
|
+
* `blue` - 蓝色
|
|
89
|
+
* `arcoblue` - arco蓝
|
|
90
|
+
* `purple` - 紫色
|
|
91
|
+
* `pinkpurple` - 粉紫色
|
|
92
|
+
* `magenta` - 品红色
|
|
93
|
+
* `gray` - 灰色
|
|
94
|
+
|
|
95
|
+
每种颜色包含以下属性:
|
|
96
|
+
- `light`: 亮色模式下的10个颜色数组
|
|
97
|
+
- `dark`: 暗色模式下的10个颜色数组
|
|
98
|
+
- `primary`: 主色(亮色模式下的第6个颜色)
|
|
99
|
+
|
|
100
|
+
**示例:**
|
|
56
101
|
|
|
57
|
-
|
|
102
|
+
```js
|
|
103
|
+
const { red, blue, arcoblue } = getPresetColors();
|
|
104
|
+
|
|
105
|
+
console.log(red.light); // 亮色模式下的红色色盘
|
|
106
|
+
console.log(blue.dark); // 暗色模式下的蓝色色盘
|
|
107
|
+
console.log(arcoblue.primary); // arco蓝的主色
|
|
108
|
+
```
|
|
58
109
|
|
|
59
|
-
|
|
110
|
+
#### getRgbStr(color: string)
|
|
60
111
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
* `arcoblue`
|
|
71
|
-
* `purple`
|
|
72
|
-
* `pinkpurple`
|
|
73
|
-
* `magenta`
|
|
74
|
-
* `gray`
|
|
112
|
+
获取指定颜色的RGB三通道字符串。
|
|
113
|
+
|
|
114
|
+
**参数:**
|
|
115
|
+
- `color`: string - 颜色值,支持十六进制格式
|
|
116
|
+
|
|
117
|
+
**返回值:**
|
|
118
|
+
- `string` - RGB三通道字符串,格式为 "r,g,b"
|
|
119
|
+
|
|
120
|
+
**示例:**
|
|
75
121
|
|
|
76
122
|
```js
|
|
77
|
-
const
|
|
123
|
+
const rgbStr = getRgbStr('#F53F3F');
|
|
124
|
+
console.log(rgbStr); // 245,63,63
|
|
125
|
+
```
|
|
78
126
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
127
|
+
### 图片取色功能
|
|
128
|
+
|
|
129
|
+
#### extractColorFromImage(image: HTMLImageElement)
|
|
130
|
+
|
|
131
|
+
从已加载的图片元素中提取主色调。
|
|
132
|
+
|
|
133
|
+
**参数:**
|
|
134
|
+
- `image`: HTMLImageElement - 已加载的图片元素
|
|
135
|
+
|
|
136
|
+
**返回值:**
|
|
137
|
+
- `Promise<string>` - 提取的主色调(十六进制格式)
|
|
138
|
+
|
|
139
|
+
**示例:**
|
|
140
|
+
|
|
141
|
+
```js
|
|
142
|
+
const image = document.getElementById('myImage');
|
|
143
|
+
extractColorFromImage(image).then(color => {
|
|
144
|
+
console.log('提取的主色调:', color);
|
|
145
|
+
// 可以用提取的颜色生成色盘
|
|
146
|
+
const palette = generate(color, { list: true });
|
|
147
|
+
});
|
|
82
148
|
```
|
|
83
149
|
|
|
84
|
-
|
|
150
|
+
#### extractColorFromFile(file: File)
|
|
151
|
+
|
|
152
|
+
从文件对象中读取图片并提取主色调。
|
|
153
|
+
|
|
154
|
+
**参数:**
|
|
155
|
+
- `file`: File - 图片文件对象
|
|
85
156
|
|
|
86
|
-
|
|
157
|
+
**返回值:**
|
|
158
|
+
- `Promise<string>` - 提取的主色调(十六进制格式)
|
|
159
|
+
|
|
160
|
+
**示例:**
|
|
87
161
|
|
|
88
162
|
```js
|
|
89
|
-
|
|
163
|
+
// 在文件输入事件中使用
|
|
164
|
+
document.getElementById('fileInput').addEventListener('change', (event) => {
|
|
165
|
+
const file = event.target.files[0];
|
|
166
|
+
if (file) {
|
|
167
|
+
extractColorFromFile(file).then(color => {
|
|
168
|
+
console.log('提取的主色调:', color);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
});
|
|
90
172
|
```
|
|
173
|
+
|
|
174
|
+
## 实现原理
|
|
175
|
+
|
|
176
|
+
### 色盘生成算法
|
|
177
|
+
|
|
178
|
+
色盘生成功能基于HSV颜色空间,通过动态调整色相(H)、饱和度(S)和明度(V)生成和谐的色盘:
|
|
179
|
+
|
|
180
|
+
1. **动态梯度算法**:根据基础颜色的HSV值,动态计算色盘中其他颜色的参数
|
|
181
|
+
2. **色相调整**:根据色相区域动态调整色相变化方向和步长
|
|
182
|
+
3. **饱和度和明度调整**:使用非线性函数确保过渡平滑
|
|
183
|
+
4. **暗色模式特殊处理**:基于亮色模式的算法,但进行了特殊调整以适应深色背景
|
|
184
|
+
|
|
185
|
+
### 图片取色算法
|
|
186
|
+
|
|
187
|
+
图片取色功能通过以下步骤提取主色调:
|
|
188
|
+
|
|
189
|
+
1. **图片处理**:将图片缩小并绘制到Canvas上
|
|
190
|
+
2. **像素量化**:将RGB颜色空间从256^3种可能的颜色减少到16^3种
|
|
191
|
+
3. **颜色频率统计**:统计每种颜色的出现频率
|
|
192
|
+
4. **主色调提取**:过滤掉灰色和接近白色/黑色的颜色,选择出现频率最高的颜色
|