- 移除固定的明暗阈值等级数组,改用动态分档机制 - 引入 neutralMargin 常量,当两分差幅小于 0.15 时视为中性图 - 修改 BrightnessName 函数,实现三分法分类:bright_N、dark_N、mid - 新增 brightnessTier 辅助函数,将占比分档到最接近的 10% - 完全透明的像素(alpha=0)不再参与明暗统计计算 - 更新错误提示信息,明暗分析失败时按中性 mid 归类 - 调整 README 文档描述,同步更新明暗分类规则说明
34 lines
1.1 KiB
Go
34 lines
1.1 KiB
Go
package classify
|
||
|
||
import "fmt"
|
||
|
||
// neutralMargin 判定明暗主导的最小分差:两分差幅小于该值视为中性图
|
||
const neutralMargin = 0.15
|
||
|
||
// BrightnessName 判定图片明暗等级,返回如 "dark_70" / "bright_40" / "mid"。
|
||
// 以主导分差幅判定亮暗:lightScore 高于 darkScore neutralMargin 以上归 bright,
|
||
// 反之归 dark,两者接近视为中性 mid(不再强制二选一)。
|
||
func BrightnessName(darkScore, lightScore float64) string {
|
||
switch {
|
||
case lightScore > darkScore+neutralMargin:
|
||
return fmt.Sprintf("bright_%d", brightnessTier(lightScore))
|
||
case darkScore > lightScore+neutralMargin:
|
||
return fmt.Sprintf("dark_%d", brightnessTier(darkScore))
|
||
default:
|
||
return "mid"
|
||
}
|
||
}
|
||
|
||
// brightnessTier 将占比分档到最接近的 10%,表示命中区间 [N-5%, N+5%),最小 10、最大 100。
|
||
// 例如 0.30~0.39 归 "30",0.96 以上归 "100",避免占比不足却挂高档名。
|
||
func brightnessTier(score float64) int {
|
||
tier := int(score*100+5) / 10 * 10
|
||
if tier < 10 {
|
||
return 10
|
||
}
|
||
if tier > 100 {
|
||
return 100
|
||
}
|
||
return tier
|
||
}
|