wml2 0.0.18

Pure Rust multi-format image decoding and encoding library supporting JPEG, PNG, GIF, WebP, TIFF and PC-98 legacy formats (MAG, MAKI, PI, PIC)
Documentation

Multi-format image decoding and encoding for RGBA buffers.

wml2 exposes a callback-based decoding API in [draw] and built-in buffer-backed helpers via [draw::ImageBuffer]. The crate can decode still images and animations into RGBA buffers, preserve metadata, and encode BMP, GIF, JPEG, PNG/APNG, TIFF, and WebP output.

Example

use wml2::draw::*;
use wml2::metadata::DataMap;
use std::error::Error;
use std::env;

pub fn main()-> Result<(),Box<dyn Error>> {
    let args: Vec<String> = env::args().collect();
    if args.len() < 2 {
        println!("usage: metadata <inputfilename>");
        return Ok(())
    }

    let filename = &args[1];
    let mut image = image_from_file(filename.to_string())?;
    let metadata = image.metadata()?;
    if let Some(metadata) = metadata {
        for (key,value) in metadata {
            match value {
                DataMap::None => {
                    println!("{}",key);
                },
                DataMap::Raw(value) => {
                    println!("{}: {}bytes",key,value.len());
                },
                DataMap::Ascii(string) => {
                    println!("{}: {}",key,string);
                },
                DataMap::Exif(value) => {
                    println!("=============== EXIF START ==============");
                    let string = value.to_string();
                    println!("{}", string);
                    println!("================ EXIF END ===============");
                },
                DataMap::ICCProfile(data) => {
                    println!("{}: {}bytes",key,data.len());
                },
                _ => {
                    println!("{}: {:?}",key,value);
                }
            }
        }        
    }
    Ok(())
}