Я ищу цветовую палитру из изображения.
я мог бы получить данные RGB из изображения
getRgbData() {
this.canvas = window.document.createElement('canvas')
this.context = this.canvas.getContext('2d')
this.width = this.canvas.width = image.width || image.naturalWidth
this.height = this.canvas.height = image.height || image.naturalHeight
this.context.drawImage(image, 0, 0, this.width, this.height)
return this.context.getImageData(0, 0, this.width, this.height)
}
и преобразовать значения RGB в модель HSV (метод rgbToHsv написан из https://gist.github.com/mjackson/5311256#file-color-conversion-algorithms-js-L1)
getHsvData() {
const { data, width, height } = this.getRgbData()
const pixcel = width * height
const q = 1
const array = []
for (var i = 0, r, g, b, offset; i < pixcel; i = i + q) {
offset = i * 4
r = data[offset + 0]
g = data[offset + 1]
b = data[offset + 2]
array.push({ r, g, b })
}
return array.map(l => this.rgbToHsv(l.r, l.g, l.b))
}
получается вот так (это преобразованные данные из RGB 24bit)
[
{h: 0.6862745098039215, s: 0.7727272727272727, v: 0.17254901960784313},
{h: 0.676470588235294, s: 0.723404255319149, v: 0.1843137254901961},
.....
]
color-thief и vibrant.js получает доминирующий цвет из модели RGB, но я хочу получить доминирующий цвет из преобразованной модели HSV. (я слышал, что извлечение цвета из hsv больше подходит для человеческого глаза. Это правда?)
как я могу извлечь цвет из модели HSV ..?