img-optimize 0.1.0

Image minify library for Rust
Documentation
mod reader;
mod magic;
mod structs;
mod encoder;

use std::io::{Read, Write};
use structs::*;
use encoder::{encode_auto, encode_auto_select};

fn main() {
    let args: Vec<String> = std::env::args().collect();
    if args.len() != 3 {
        eprintln!("Usage: {} <input> <output>", args[0]);
        std::process::exit(1);
    }

    // Check file exists
    if !std::path::Path::new(&args[1]).exists() {
        eprintln!("File not found: {}", args[1]);
        std::process::exit(1);
    }

    let im_info: ImageInfo;

    let file = std::fs::File::open(&args[1]).unwrap();
    let mut buf = Vec::new();
    let mut reader = std::io::BufReader::new(file);
    reader.read_to_end(&mut buf).unwrap();

    let file_type = magic::detect_file_type_with_magic_number(&buf);
    if file_type.is_err() {
        eprintln!("Unsupported file type");
        std::process::exit(1);
    }
    
    println!("File type: {}", file_type.unwrap());
    println!("Input size: {}", buf.len());

    match file_type.unwrap() {
        "jpeg" => {
            todo!();
        },
        _ => {
            im_info = reader::read(&buf).unwrap();
        }
    }

    println!("Image size: {}x{}", im_info.width, im_info.height);
    println!("Bit depth: {}", im_info.bit_depth);
    println!("Color type: {}", match im_info.color_type {
        0 => "Grayscale",
        2 => "RGB",
        3 => "Indexed",
        4 => "GrayscaleAlpha",
        6 => "RGBA",
        _ => "Unknown",
    });

    let compression_config = CompressionConfig::default();

    let decide = encode_auto_select(&im_info, &compression_config);

    println!("Auto-decided file type: {}", decide);

    let auto_decide_res = encode_auto(im_info, compression_config);

    println!("Output size: {}", auto_decide_res.1.len());

    let new_file_name = args[2].as_str().to_owned() + "." + &auto_decide_res.0;
    let output_file = std::fs::File::create(new_file_name).unwrap();
    let mut writer = std::io::BufWriter::new(output_file);
    writer.write_all(&auto_decide_res.1).unwrap();
}