use crate::svg::{SvgParser, SvgRasterizer};
use super::avatar_renderer::AvatarRenderer;
use super::jpg_writer::to_jpg_rgb;
use super::png_writer::to_rgba8;
pub struct JpgAvatarRenderer;
impl AvatarRenderer for JpgAvatarRenderer {
fn render(&self, svg: &str, size: u32) -> Vec<u8> {
let doc = SvgParser::parse(svg);
let pixmap =
SvgRasterizer::rasterize_with_background(&doc, size, Some((255, 255, 255)))
.expect("JPEG 光栅化失败");
let rgba = to_rgba8(&pixmap);
let mut rgb = Vec::with_capacity(rgba.len() / 4 * 3);
for px in rgba.chunks_exact(4) {
rgb.extend_from_slice(&px[0..3]);
}
to_jpg_rgb(&rgb, size, size)
}
}