- 删除 vars 全局状态,按职责拆分 internal/ 包:scanner/probe/classify/organize/mover/store/digest - 数据驱动归类规则替代图片/视频重复分支,store 改为结构体实例 - build.sh 按系统类型编译:Windows 用 upx 压缩,macOS/Linux 不压缩 - 忽略目录拆分:图片_已忽略 / 视频_已忽略 - 输出构建产物加入 .gitignore
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package classify
|
|
|
|
import "fmt"
|
|
|
|
// standardResolution 标准分辨率规则:宽高精确匹配
|
|
type standardResolution struct {
|
|
width int
|
|
height int
|
|
suffix string
|
|
}
|
|
|
|
var standardResolutions = []standardResolution{
|
|
{1280, 720, "720P"}, // 720p 标准高清
|
|
{1600, 900, "1D5KP"}, // 介于 HD 与 FHD 之间
|
|
{1920, 1080, "1080P"}, // 1080p 全高清
|
|
{2048, 1080, "2DKP"}, // 影院 2K
|
|
{2560, 1440, "2D5KP"}, // 2.5K
|
|
{2560, 1080, "UltraWide2KP"}, // 带鱼屏
|
|
{3440, 1440, "UltraWide3KP"}, // 带鱼屏
|
|
{5120, 2160, "UltraWide4KP"}, // 带鱼屏
|
|
{3840, 2160, "4KP"}, // 主流 4K
|
|
{4096, 2160, "4KHP"}, // DCI 4K
|
|
{7680, 4320, "8KP"}, // 8K
|
|
}
|
|
|
|
// 非标分辨率分档参数
|
|
const (
|
|
bucketStep = 1024 // 每 1024px 一档
|
|
maxLevel = 19 // 1K ~ 19K 共 19 档(普通另算 1 档,合计 20 档)
|
|
)
|
|
|
|
// matchStandard 精确匹配标准分辨率,命中返回后缀,否则返回空串
|
|
func matchStandard(width, height int) string {
|
|
for _, r := range standardResolutions {
|
|
if r.width == width && r.height == height {
|
|
return r.suffix
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// levelName 按长边分档:普通(<1024) / 1K~19K(每1024一档) / overflow(≥20480)
|
|
func levelName(longEdge int, overflow string) string {
|
|
if longEdge < bucketStep {
|
|
return "普通"
|
|
}
|
|
level := longEdge / bucketStep
|
|
if level > maxLevel {
|
|
return overflow
|
|
}
|
|
return fmt.Sprintf("%dK", level)
|
|
}
|