pride-overlay 3.0.0

overlay pride flags on images
Documentation
use super::*;
use crate::flags::wasm::Flag;
use std::io::Cursor;
use wasm_bindgen::prelude::*;

fn apply<E: Effect>(data: &[u8], flag: Flag, effect: E) -> Result<Vec<u8>, image::ImageError> {
    let format = image::guess_format(data)?;
    let mut image = image::load_from_memory_with_format(data, format)?;
    effect.apply(&mut image, flag);
    let mut output: Vec<u8> = Vec::new();
    image.write_to(&mut Cursor::new(&mut output), format)?;
    Ok(output)
}

#[wasm_bindgen(js_name = "applyOverlay")]
pub fn apply_overlay(image: &[u8], flag: Flag, opacity: Option<f32>) -> Vec<u8> {
    let effect = Overlay::builder()
        .opacity(opacity.unwrap_or(Overlay::DEFAULT_OPACITY))
        .build();
    apply(image, flag, effect).unwrap()
}

#[wasm_bindgen(js_name = "applyRing")]
pub fn apply_ring(
    image: &[u8],
    flag: Flag,
    opacity: Option<f32>,
    thickness: Option<f32>,
) -> Vec<u8> {
    let effect = Ring::builder()
        .opacity(opacity.unwrap_or(Ring::DEFAULT_OPACITY))
        .thickness(thickness.unwrap_or(Ring::DEFAULT_THICKNESS))
        .build();
    apply(image, flag, effect).unwrap()
}