extern crate image;
extern crate jpeg2000;
#[macro_use]
extern crate slog;
extern crate slog_async;
extern crate slog_term;
use jpeg2000::decode::{Codec, ColorSpace, DecodeConfig};
use slog::Drain;
fn get_logger() -> slog::Logger {
let decorator = slog_term::TermDecorator::new().build();
let drain = slog_term::CompactFormat::new(decorator).build().fuse();
let drain = slog_async::Async::new(drain).build().fuse();
slog::Logger::root(drain, o!())
}
fn main() {
let images = vec![
(
include_bytes!("./images/rust_logo.jp2").to_vec(),
"rust_logo",
Codec::JP2,
),
(
include_bytes!("./images/opensim_texture.jp2").to_vec(),
"opensim_texture",
Codec::J2K,
),
];
let logger = get_logger();
for (mut data, basename, codec) in images {
let img = jpeg2000::decode::from_memory(
&mut data[..],
codec,
DecodeConfig {
default_colorspace: Some(ColorSpace::SRGB),
discard_level: 0,
},
Some(logger.clone()),
).unwrap();
img.save(format!("output/{}.png", basename)).unwrap();
}
}