use cc_xcap::Window;
use fs_extra::dir;
use std::time::Instant;
fn normalized(filename: &str) -> String {
filename.replace(['|', '\\', ':', '/'], "")
}
fn main() {
let start = Instant::now();
dir::create_all("target/thumbnails", true).unwrap();
let windows = Window::list_all().unwrap();
println!("Total windows: {}", windows.len());
let mut i = 0;
for window in windows {
if window.is_minimized().unwrap() {
continue;
}
let title = window.title().unwrap_or_else(|_| "Unknown".to_string());
let app_name = window.app_name().unwrap_or_else(|_| "Unknown".to_string());
println!(
"Processing: {} ({}) - Size: {}x{}",
title,
app_name,
window.width().unwrap(),
window.height().unwrap()
);
let original_start = Instant::now();
let original_image = match window.capture_image() {
Ok(img) => img,
Err(e) => {
println!("Failed to capture original image: {}", e);
continue;
}
};
let original_time = original_start.elapsed();
let thumbnail_start = Instant::now();
let thumbnail_image = match window.capture_thumbnail() {
Ok(img) => img,
Err(e) => {
println!("Failed to capture thumbnail: {}", e);
continue;
}
};
let thumbnail_time = thumbnail_start.elapsed();
let original_filename = format!(
"target/thumbnails/original-{}-{}.png",
i,
normalized(&title)
);
if let Err(e) = original_image.save(&original_filename) {
println!("Failed to save original image: {}", e);
}
let thumbnail_filename = format!(
"target/thumbnails/thumbnail-{}-{}.png",
i,
normalized(&title)
);
if let Err(e) = thumbnail_image.save(&thumbnail_filename) {
println!("Failed to save thumbnail: {}", e);
}
println!(
" Original: {}x{} ({}KB) - Time: {:?}",
original_image.width(),
original_image.height(),
original_image.len() / 1024,
original_time
);
println!(
" Thumbnail: {}x{} ({}KB) - Time: {:?}",
thumbnail_image.width(),
thumbnail_image.height(),
thumbnail_image.len() / 1024,
thumbnail_time
);
println!(
" Compression ratio: {:.1}%",
(thumbnail_image.len() as f64 / original_image.len() as f64) * 100.0
);
println!();
i += 1;
if i >= 5 {
break;
}
}
println!("运行耗时: {:?}", start.elapsed());
println!("图片已保存到 target/thumbnails/ 目录");
println!(
"原始图片文件名格式: original-{}-{}.png",
"{index}", "{title}"
);
println!(
"缩略图文件名格式: thumbnail-{}-{}.png",
"{index}", "{title}"
);
}