40 lines
1.6 KiB
Rust
40 lines
1.6 KiB
Rust
|
|
use std::path::Path;
|
||
|
|
|
||
|
|
fn main() {
|
||
|
|
let path = Path::new("_tmp/roundtrip_output.psd");
|
||
|
|
let bytes = std::fs::read(path).expect("read");
|
||
|
|
|
||
|
|
println!("=== Verify roundtrip PSD parseable ===");
|
||
|
|
println!("File: {} bytes", bytes.len());
|
||
|
|
|
||
|
|
match hcie_psd::Psd::from_bytes(&bytes) {
|
||
|
|
Ok(psd) => {
|
||
|
|
println!("Psd::from_bytes OK: {}x{}, {} layers", psd.width(), psd.height(), psd.layers().len());
|
||
|
|
for (i, layer) in psd.layers().iter().enumerate() {
|
||
|
|
println!(" [{}] '{}' visible={} opacity={}", i, layer.name(), !layer.visible(), layer.opacity());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
Err(e) => println!("Psd::from_bytes FAILED: {:?}", e),
|
||
|
|
}
|
||
|
|
|
||
|
|
match hcie_psd::import_psd(path) {
|
||
|
|
Ok(layers) => {
|
||
|
|
println!("\nimport_psd OK: {} layers", layers.len());
|
||
|
|
for (i, layer) in layers.iter().enumerate() {
|
||
|
|
println!(" [{}] '{}' effects={} blend={:?}", i, layer.name, layer.effects.len(), layer.blend_mode);
|
||
|
|
for (j, fx) in layer.effects.iter().enumerate() {
|
||
|
|
println!(" effect[{}]: {:?}", j, std::mem::discriminant(fx));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
Err(e) => println!("import_psd FAILED: {}", e),
|
||
|
|
}
|
||
|
|
|
||
|
|
println!("\n=== Testing composited RGBA ===");
|
||
|
|
let psd = hcie_psd::Psd::from_bytes(&bytes).unwrap();
|
||
|
|
let rgba = psd.rgba();
|
||
|
|
println!("RGBA: {} bytes (expected {})", rgba.len(), psd.width() * psd.height() * 4);
|
||
|
|
let non_zero = rgba.iter().filter(|&&b| b > 0).count();
|
||
|
|
println!("Non-zero bytes: {} / {}", non_zero, rgba.len());
|
||
|
|
}
|