const analyzeImageColor = (imageUrl: string): Promise<{ bg: string; color: string; hoverBg: string }> => {
return new Promise((resolve) => {
const img = new Image()
img.crossOrigin = 'Anonymous'
img.src = imageUrl
img.onload = () => {
try {
const canvas = document.createElement('canvas')
const ctx = canvas.getContext('2d')
if (!ctx) {
resolve({ bg: 'rgba(0, 0, 0, 0.3)', color: '#fff', hoverBg: 'rgba(0, 0, 0, 0.6)' })
return
}
const size = 50
canvas.width = size
canvas.height = size
ctx.drawImage(img, 0, 0, size, size)
const imageData = ctx.getImageData(0, 0, size, size)
const data = imageData.data
let r = 0, g = 0, b = 0
const pixelCount = data.length / 4
for (let i = 0; i < data.length; i += 4) {
r += data[i]
g += data[i + 1]
b += data[i + 2]
}
r = Math.floor(r / pixelCount)
g = Math.floor(g / pixelCount)
b = Math.floor(b / pixelCount)
const brightness = (r * 299 + g * 587 + b * 114) / 1000
if (brightness > 128) {
resolve({
bg: 'rgba(0, 0, 0, 0.3)',
color: '#fff',
hoverBg: 'rgba(0, 0, 0, 0.6)'
})
} else {
resolve({
bg: 'rgba(255, 255, 255, 0.3)',
color: '#000',
hoverBg: 'rgba(255, 255, 255, 0.6)'
})
}
} catch (error) {
resolve({ bg: 'rgba(0, 0, 0, 0.3)', color: '#fff', hoverBg: 'rgba(0, 0, 0, 0.6)' })
}
}
img.onerror = () => {
resolve({ bg: 'rgba(0, 0, 0, 0.3)', color: '#fff', hoverBg: 'rgba(0, 0, 0, 0.6)' })
}
})
}