use image::RgbaImage;
use log::info;
use std::fs;
use imageproc::{drawing, rect::Rect};
use webp_animation::Encoder;
fn main() {
env_logger::init_from_env(env_logger::Env::default().default_filter_or("info"));
let (width, height) = (480, 480);
let (frames, total_time_ms) = (30, 1000);
let mut encoder = Encoder::new((width, height)).unwrap();
info!("Encoder initialized");
let mut frame = RgbaImage::new(width, height);
let dark = image::Rgba([0, 0, 0, 255]);
let white = image::Rgba([255, 255, 255, 255]);
let frame_timestamp_ms = (total_time_ms as f32 / frames as f32) as i32;
for i in 0..frames {
info!("\tencode frame {}", i);
let pos = ((i as f32 * width as f32) / frames as f32) as i32;
drawing::draw_filled_rect_mut(&mut frame, Rect::at(0, 0).of_size(width, height), dark);
drawing::draw_filled_rect_mut(&mut frame, Rect::at(pos, pos).of_size(20, 20), white);
encoder
.add_frame(frame.as_raw(), i * frame_timestamp_ms)
.unwrap();
}
let final_timestamp_ms = frames * frame_timestamp_ms;
let webp_data = encoder.finalize(final_timestamp_ms).unwrap();
let output = "data/example.webp";
fs::write(output, webp_data).unwrap();
info!("Saved to {}", output);
}