Binary to extract image file
This commit is contained in:
parent
659c98034a
commit
5a0d224be7
44
src/bin/id3-image-extract.rs
Normal file
44
src/bin/id3-image-extract.rs
Normal file
@ -0,0 +1,44 @@
|
||||
use std::env;
|
||||
use std::process;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
fn main() {
|
||||
let args: Vec<_> = env::args().collect();
|
||||
|
||||
if args.len() < 2 {
|
||||
eprintln!("USAGE: id3-image-extract <mp3-file> [image-file]");
|
||||
process::exit(1);
|
||||
}
|
||||
|
||||
let music_filename = args[1].clone();
|
||||
let image_filename = args.get(2).cloned().unwrap_or_else(|| replace_extension(&music_filename, "jpg"));
|
||||
|
||||
let tag = match id3::Tag::read_from_path(&music_filename) {
|
||||
Ok(t) => t,
|
||||
Err(e) => {
|
||||
eprintln!("Error reading music file {}: {}", music_filename, e);
|
||||
process::exit(1);
|
||||
},
|
||||
};
|
||||
|
||||
let first_picture = tag.pictures().next();
|
||||
|
||||
if let Some(p) = first_picture {
|
||||
match image::load_from_memory(&p.data) {
|
||||
Ok(image) => {
|
||||
image.save(&image_filename);
|
||||
println!("{}", image_filename);
|
||||
},
|
||||
Err(e) => {
|
||||
eprintln!("Couldn't load image: {}", e);
|
||||
process::exit(1);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
fn replace_extension(path: &str, replacement: &str) -> String {
|
||||
let mut path = PathBuf::from(&path);
|
||||
path.set_extension(replacement);
|
||||
path.to_string_lossy().to_string()
|
||||
}
|
Loading…
Reference in New Issue
Block a user