use base64::{engine::general_purpose::STANDARD, Engine as _};
use edgequake_llm::ImageData;
use image::DynamicImage;
use std::io::Cursor;
use tracing::debug;
pub fn encode_page(img: &DynamicImage) -> Result<ImageData, image::ImageError> {
let mut buf = Vec::new();
img.write_to(&mut Cursor::new(&mut buf), image::ImageFormat::Png)?;
let b64 = STANDARD.encode(&buf);
debug!("Encoded image → {} bytes base64", b64.len());
Ok(ImageData::new(b64, "image/png").with_detail("high"))
}
#[cfg(test)]
mod tests {
use super::*;
use image::{Rgba, RgbaImage};
#[test]
fn encode_small_image() {
let img = DynamicImage::ImageRgba8(RgbaImage::from_pixel(10, 10, Rgba([255, 0, 0, 255])));
let data = encode_page(&img).expect("encode should succeed");
assert_eq!(data.mime_type, "image/png");
assert!(!data.data.is_empty());
let decoded = STANDARD.decode(&data.data).expect("valid base64");
assert!(!decoded.is_empty());
}
}