/**
* 颜色通道
*/
export type ColorChanel = 'r' | 'g' | 'b'
/**
* 像素点对象
*/
export type Pixel = { r: number; g: number; b: number }
/**
* rgb 颜色对象
*/
export type Color = Pixel
/**
* canvas 矩形区域
*/
export type CanvasArea = {
sx: number // 区域横坐标(左上角)
sy: number // 区域纵坐标
sw: number // 区域宽度
sh: number // 区域高度
}
/**
* 从 \
元素中提取主色调
* @param image 目标 \
元素
* @param n 提取颜色的数量,默认值为 1,最大值为 16
* @returns 提取出的 rgb 颜色数组,例如 [{ r: 0, g: 0, b: 0}]
*/
export const getImagePalette = (image: HTMLImageElement, n: number = 1) => {
// 1. 加载图片,并将图片绘制到 canvas 画布上
const context = drawImageToCanvas(image)
// 2. 获取图片的所有像素点
const pixels = getPixelsByContext(context, {
sx: 0,
sy: 0,
sw: image.width,
sh: image.height,
})
// 3. 利用中值切割算法进行颜色量化
return quantizeColor(pixels, n)
}
/**
* 将 \
元素绘制到 \