fn main() { use std::io::Write; let base = "_images/_psd_stil_test"; let tests = [ ("outer_glow", "outer_glow"), ("outer_glow_2", "outer_glow_2"), ("outer_glow_3", "outer_glow_3"), ("sultan Layer 1", "sultan_test/sultan/Layer 1"), ("emboss", "emboss"), ]; for (name, path) in &tests { let psd_path = format!("{}/{}.psd", base, path); let png_path = format!("{}/{}.png", base, path); if !std::path::Path::new(&psd_path).exists() { continue; } let ref_img = image::open(&png_path).unwrap().to_rgba8(); let ref_pixels = ref_img.into_raw(); let layers = hcie_psd::import_psd(std::path::Path::new(&psd_path)).unwrap(); let layer = &layers[0]; let px = (layer.width * layer.height) as usize; let fx_effects: Vec = layer.effects.iter() .map(|e| hcie_fx::types::protocol_to_hcie_fx_effect(e)).collect(); let composite = hcie_fx::apply_layer_effects(&layer.pixels, layer.width, layer.height, &fx_effects, 1.0); let mut raw_diff = 0.0f64; let mut comp_diff = 0.0f64; for i in 0..px { let rd = (0..4).map(|c| (layer.pixels[i*4+c] as i32 - ref_pixels[i*4+c] as i32).abs() as f64).sum::(); raw_diff += rd; let cd = (0..4).map(|c| (composite[i*4+c] as i32 - ref_pixels[i*4+c] as i32).abs() as f64).sum::(); comp_diff += cd; } let raw_mae = raw_diff / px as f64 / 4.0; let comp_mae = comp_diff / px as f64 / 4.0; for e in &layer.effects { println!("{}: {:?}", name, e); } println!(" {} {}x{} raw={:.3} composite={:.3} improvement={:.1}%", name, layer.width, layer.height, raw_mae, comp_mae, (raw_mae - comp_mae) / raw_mae * 100.0); } std::io::stdout().flush().ok(); }