feat: 目录层级变更
This commit is contained in:
@@ -2,26 +2,40 @@ package classify
|
||||
|
||||
import "fmt"
|
||||
|
||||
// BrightnessName 根据暗色/亮色像素占比,给图片定"明暗等级",返回类似:
|
||||
// - "dark_75" → 暗色像素占 50%~75% 的暗图
|
||||
// - "bright" → 亮色像素比暗色多的亮图(不分子档位)
|
||||
// BrightnessName 根据暗色像素占比,给图片定"明暗等级",返回类似:
|
||||
// - "dark_25" → 暗色像素占 0%~33% 的偏亮图
|
||||
// - "dark_50" → 暗色像素占 33%~66% 的中间调
|
||||
// - "dark_75" → 暗色像素占 66%~100% 的暗图
|
||||
//
|
||||
// 判断规则:亮色占比 > 暗色占比 → bright;否则按暗色占比取整到 25% 一档。
|
||||
// 三档按 33%/66% 等分。
|
||||
func BrightnessName(darkScore, lightScore float64) string {
|
||||
if lightScore > darkScore {
|
||||
return "bright"
|
||||
}
|
||||
return fmt.Sprintf("dark_%d", brightnessTier(darkScore))
|
||||
}
|
||||
|
||||
// brightnessTier 把暗色占比(0~1)取整到最接近的 25% 档位,范围 25~100。
|
||||
// brightnessTier 把暗色占比(0~1)映射到三档:25/50/75。
|
||||
// 分界点:33% 和 66%。
|
||||
func brightnessTier(score float64) int {
|
||||
tier := int(score*100+12) / 25 * 25
|
||||
if tier < 25 {
|
||||
switch {
|
||||
case score < 0.33:
|
||||
return 25
|
||||
case score < 0.66:
|
||||
return 50
|
||||
default:
|
||||
return 75
|
||||
}
|
||||
}
|
||||
|
||||
// NsfwLevelName 根据色情评分(0~1)返回中文分档名称。
|
||||
// 四档:安全(0~0.25)/ 低俗(0.25~0.5)/ 擦边(0.5~0.75)/ 色情(0.75~1)。
|
||||
func NsfwLevelName(score float64) string {
|
||||
switch {
|
||||
case score < 0.25:
|
||||
return "安全"
|
||||
case score < 0.5:
|
||||
return "低俗"
|
||||
case score < 0.75:
|
||||
return "擦边"
|
||||
default:
|
||||
return "色情"
|
||||
}
|
||||
if tier > 100 {
|
||||
return 100
|
||||
}
|
||||
return tier
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
// 大白话理解,就是定分类命名规则:
|
||||
// - 画面是横的还是竖的?(横屏 / 竖屏 / 正方形)
|
||||
// - 清晰度算哪个档?(720P / 1080P / 4K…;不标准的按长边大小给个约数,如 5K)
|
||||
// - 图片还要看是暗调还是亮调(dark / mid / bright),作为子目录
|
||||
// - 图片还要看是暗调还是亮调(dark_25 / dark_50 / dark_75),以及色情评分档(安全 / 低俗 / 擦边 / 色情)
|
||||
//
|
||||
// 最终拼出一个文件夹名,比如:
|
||||
// - 「图片_横屏_1080P/bright_20」 一张横向、1080P、偏亮的图片
|
||||
// - 「图片_横屏_1080P-dark_25-安全」 一张横向、1080P、偏亮、安全的图片
|
||||
// - 「视频_竖屏_4k」 一个竖向、4K 的视频
|
||||
//
|
||||
// 这个包全是"纯函数"——不依赖任何状态,给什么算什么,好理解也好测。
|
||||
@@ -55,26 +55,18 @@ func (o Orientation) String() string {
|
||||
// ============================ 归类目录名 ============================
|
||||
|
||||
// ImageDir 返回一张图片该进的文件夹路径,比如:
|
||||
// - 「图片_GIF」:GIF 动图单独放(不做明暗分类)
|
||||
// - 「图片_横屏_1080P/bright_20」:普通图片 = 方向 + 清晰度,明暗作为其子目录
|
||||
func ImageDir(ext string, width, height int, darkScore, lightScore float64) string {
|
||||
return imageDir("图片", ext, width, height, darkScore, lightScore)
|
||||
}
|
||||
|
||||
// ImageDirSensitive 返回一张被判为色情的图片该进的文件夹路径,比如:
|
||||
// - 「图片_敏感_GIF」:GIF 单独放(不做明暗分类)
|
||||
// - 「图片_敏感_横屏_1080P/bright_20」:普通分类前加「_敏感」前缀,明暗仍是子目录
|
||||
func ImageDirSensitive(ext string, width, height int, darkScore, lightScore float64) string {
|
||||
return imageDir("图片_敏感", ext, width, height, darkScore, lightScore)
|
||||
}
|
||||
|
||||
// imageDir 拼出"类型 + 方向 + 清晰度 + 明暗子目录"这段路径。
|
||||
func imageDir(kind, ext string, width, height int, darkScore, lightScore float64) string {
|
||||
// - 「图片_GIF」:GIF 动图单独放(不做明暗/色情分类)
|
||||
// - 「图片_横屏_1080P-dark_25-安全」:普通图片 = 方向 + 清晰度 + 明暗 + 色情评分档
|
||||
func ImageDir(ext string, width, height int, darkScore, lightScore, nsfwScore float64, nsfwEnabled bool) string {
|
||||
if strings.EqualFold(ext, ".gif") {
|
||||
return kind + "_GIF"
|
||||
return "图片_GIF"
|
||||
}
|
||||
dir := resolutionDir(kind, ext, width, height)
|
||||
return dir + "/" + BrightnessName(darkScore, lightScore)
|
||||
dir := resolutionDir("图片", ext, width, height)
|
||||
result := dir + "-" + BrightnessName(darkScore, lightScore)
|
||||
if nsfwEnabled {
|
||||
result += "-" + NsfwLevelName(nsfwScore)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// VideoDir 返回一个视频该进的文件夹名,比如「视频_竖屏_4k」「视频_横屏_GIF」。
|
||||
|
||||
Reference in New Issue
Block a user