/**
* 分析图片主色调并返回合适的按钮颜色
* @param imageUrl 图片地址
* @returns 按钮颜色配置 { bg: 背景色, color: 图标颜色 }
*/
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)' })
}
})
}
分析图片主色调并返回合适的按钮颜色
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 1、首先加一个UIColor的分类。 #import "UIColor+mostColor.h" 2、获取图片主色...
- Haishoku传送门 在平时工作和生活中经常看到一些颜色很好看的图片,就我个人而言,很想有这样一个工具能够获取到...
- 最近公司的项目升级到了AndroidX,项目里依赖的第三方库也同时升了一波版本号,Gilde升级到4.9.0后一些...