[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 bailong360 于 2019-3-27 21:23 编辑

批处理好像还真不好办...
提供一个思路, 使用 ImageMagick 的 convert 工具计算图片的平均颜色, 若 RGB 任意两项相差大于 2 则认定为有其它颜色 (
  1. convert test.jpg -scale "1x1\!" -format "%[pixel:s]" info:-
复制代码
LZ 可以先试试识别效果如何 (其实是太久没写批处理了手生了
2

评分人数

TOP

本帖最后由 bailong360 于 2019-3-28 20:00 编辑

来个 Rust 的
  1. use image::GenericImageView;
  2. use std::path::{Path, PathBuf};
  3. // 提取 RGB 的平均方差
  4. fn rgb_variance<P: AsRef<Path>>(path: P) -> f64 {
  5.     let img = image::open(path).expect("无法打开");
  6.     stats::mean(img.pixels().map(|(_, _, rgba)| {
  7.         stats::variance(rgba.data.iter().take(3).cloned())
  8.     }))
  9. }
  10. // 文件名后加入 "C"
  11. fn rename(path: PathBuf) {
  12.     let mut new_path = path.clone();
  13.     let base_name = path.file_name().unwrap().to_str().unwrap();
  14.     new_path.set_file_name(base_name.replace(".", "C."));
  15.     println!("  rename {}", path.display());
  16.     std::fs::rename(path, new_path).expect("重命名失败");
  17. }
  18. fn main() {
  19.     // 从环境变量中读取阈值, 默认 1.0
  20.     let threshold = std::env::var("THRESHOLD")
  21.         .map(|v| v.parse::<f64>().unwrap())
  22.         .unwrap_or(1.0);
  23.     for entry in glob::glob("*.jpg").unwrap() {
  24.         let path = entry.unwrap();
  25.         let rgb_variance = rgb_variance(&path);
  26.         println!("{:}\t{}", rgb_variance, path.display());
  27.         if rgb_variance > threshold {
  28.             rename(path);
  29.         }
  30.     }
  31. }
复制代码
可以通过环境变量 THRESHOLD 指定阈值, 默认 1.0

下载地址: https://send.firefox.com/downloa ... 2Rsz_HhEtyBcV_3maww

交叉编译真爽!
Firefox Send 真爽!
6

评分人数

TOP

回复 10# 001011


    不客气. 问题解决后,请编辑顶楼帖子在标题前面注明[已解决]
1

评分人数

    • CrLf: 十分感谢PB + 10

TOP

回复 12# 001011


    这显然是意料之外的bug——有报错吗

TOP

返回列表