Files
kenaito-wallpaper-organizer/README.md
T
2024-11-14 21:02:57 +08:00

4.7 KiB
Raw Blame History

Kenaito Wallpaper Organizer 🖼️

一个自动扫描、分析并归类壁纸的命令行工具。它会递归扫描指定目录下的所有图片,分析每张图的明暗程度,并按明暗等级 → 方向 → 分辨率进行分类归档(移动或复制)。

功能特性

  • 智能明暗分析:基于 ITU-R BT.601 亮度公式,同时统计暗色像素(亮度 < 80)与亮色像素(亮度 > 175)占比
  • 多级明暗分类:暗色 dark_100/95/85/75/65/55 与亮色 bright_85/75/65/55/45/35/25/15 多档归档
  • 方向区分:横屏 horizontal / 竖屏 vertical / 方形 square 子目录
  • 分辨率分档:按长边区分 1K~8K 子目录
  • 特殊归置:过小图(fixed)、分辨率不足(other)、异常文件(error)
  • 多格式支持:JPG/JPEG/JFIF/JPE、PNG/APNG、GIF、BMP/DIB、WebP、TIFF/TIF、PSD/PSB
  • 并发处理:默认 24 线程并行分析,大图自动采样加速
  • UUID 命名:归档后的文件统一重命名为随机 UUID,不保留原文件名

编译

# Linux / macOS
go build -o kenaito-wallpaper-organizer main.go

# Windows
go build -o kenaito-wallpaper-organizer.exe main.go

或使用构建脚本:

bash build.sh

快速开始

# 在壁纸目录下运行(默认移动模式,等待5秒确认)
cd ~/Pictures/wallpapers
./kenaito-wallpaper-organizer

# 用复制模式试运行(不会移动原文件)
./kenaito-wallpaper-organizer -copy -sleep 0

执行后,源目录下会生成如下结构:

├── wallpapers_wallpapers/ │ ├── dark_100/ │ │ ├── horizontal/ → 1K/ 2K/ 4K/ … │ │ ├── vertical/ → 1K/ 2K/ 4K/ … │ │ └── square/ → 1K/ … │ ├── bright_85/ # 与 dark_ 同构(15~85) │ ├── psd/ # PSD/PSB,不做明暗分类 │ ├── gif/ # GIF,不做明暗分类 │ ├── fixed/ # 长边 < 1080 的过小图 │ ├── other/ # 尺寸不足 min-width/min-height │ └── error/ # 大小超限或解码失败的异常文件


## 命令行参数

| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `-source` | string | `.` | 源目录路径,递归扫描该目录下所有图片 |
| `-target` | string | 自动生成 | 目标目录基名,留空自动使用 `<源目录名>_wallpapers` |
| `-min-width` | int | `1080` | 图片最小宽度(像素),低于此值进入 other |
| `-min-height` | int | `720` | 图片最小高度(像素),低于此值进入 other |
| `-min-size` | int | `100` | 最小文件大小(KB),小于此值进入 error |
| `-max-size` | int | `100` | 最大文件大小(MB),大于此值进入 error |
| `-copy` | bool | `false` | 复制模式,设为 true 则复制原文件而非移动 |
| `-parallel` | int | `24` | 并发分析线程数 |
| `-verbose` | bool | `true` | 详细输出,显示每个文件的处理过程 |
| `-sleep` | int | `5` | 执行前等待秒数,设为 0 则立即执行,等待期间可按 Ctrl+C 取消 |

## 使用示例

```bash
# 扫描指定目录
./kenaito-wallpaper-organizer -source ~/Downloads/wallpapers

# 复制模式(保留原文件不动)
./kenaito-wallpaper-organizer -source ~/Pictures -copy

# 跳过等待,直接执行
./kenaito-wallpaper-organizer -sleep 0

# 只要 4K 以上壁纸
./kenaito-wallpaper-organizer -min-width 3840 -min-height 2160

# 高配机器,关闭详细输出加速
./kenaito-wallpaper-organizer -parallel 48 -verbose=false

分类优先级

  1. psd/gif:PSD/PSB 归 psd/,GIF 归 gif/,均不做明暗分类
  2. fixed:长边 < 1080 的过小图片
  3. other:尺寸达标(≥1080)但低于 min-width/min-height 阈值的图片
  4. dark_N / bright_N:达标图按主导分判定亮暗——lightScore > darkScore 归明亮、否则归暗色,每张图必归亮暗之一(无 neutral)

所有正常分类(dark/bright/other)内部均按 方向 → 分辨率 分子目录。

明暗评分算法

brightness = 0.299×R + 0.587×G + 0.114×B   (ITU-R BT.601)
darkScore  = 亮度 < 80 的像素占比
lightScore = 亮度 > 175 的像素占比

注意事项

  • 默认使用移动模式,原文件会从源目录移走,首次使用建议加 -copy 试运行
  • 目标目录会被自动跳过,不会重复处理之前已整理的文件
  • UUID 命名,极端情况下重名会自动追加 _(1)、_(2) 等序号
  • 支持的图片格式依赖 Go 标准库 + golang.org/x/image + github.com/oov/psd:JPG/JPEG/JFIF/JPE、PNG/APNG、GIF、BMP/DIB、WebP、TIFF/TIF、PSD/PSB
  • 无后缀名的图片会通过文件头(magic 字节)探测自动识别,不会被静默跳过

License

MIT