package classify import "fmt" // neutralMargin 判定"中性图"的最小分差: // 如果亮色占比和暗色占比相差不到这个值,就认为这张图不亮不暗,归为「mid」中性。 const neutralMargin = 0.15 // BrightnessName 根据暗色/亮色像素占比,给图片定"明暗等级",返回类似: // - "dark_80" → 暗色像素占 70%~90% 的暗图 // - "bright_40" → 亮色像素占 30%~50% 的亮图 // - "mid" → 明暗差不多,不好说谁多,归中性 // // 判断规则(大白话):谁占得多、而且多出明显一截(超过 neutralMargin), // 就按谁命名,数字是占比取整到 20% 一档。 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 把占比(0~1)取整到"最接近的 20%"作为档位数字,范围 20~100。 // 例:0.30~0.50 → "40";0.96 以上 → "100"。 // 这样文件夹名里的数字不会出现"明明很少却挂个大数字"的情况。 func brightnessTier(score float64) int { tier := int(score*100+10) / 20 * 20 if tier < 20 { return 20 } if tier > 100 { return 100 } return tier }