hashavatar 1.1.0

Stable deterministic procedural avatars in Rust with configurable identity hashing, WebP, optional PNG/JPEG/GIF, and SVG export
Documentation
use super::*;

pub(crate) fn render_bear_svg(spec: AvatarSpec, identity: &AvatarIdentity) -> String {
    let w = spec.width as f32;
    let h = spec.height as f32;
    let cx = w / 2.0;
    let cy = h * 0.56;
    let rx = w * (0.27 + identity.unit_f32(4) * 0.05);
    let ry = h * (0.24 + identity.unit_f32(5) * 0.05);
    let fur = hsl_to_color(24.0 + identity.unit_f32(1) * 24.0, 0.38, 0.48);
    let muzzle = hsl_to_color(32.0 + identity.unit_f32(2) * 12.0, 0.22, 0.84);
    let inner = hsl_to_color(18.0 + identity.unit_f32(3) * 18.0, 0.34, 0.72);
    format!(
        r##"<circle cx="{lel}" cy="{ey}" r="{er}" fill="{fur}"/><circle cx="{rel}" cy="{ey}" r="{er}" fill="{fur}"/><circle cx="{lel}" cy="{ey}" r="{ir}" fill="{inner}"/><circle cx="{rel}" cy="{ey}" r="{ir}" fill="{inner}"/><ellipse cx="{cx}" cy="{cy}" rx="{rx}" ry="{ry}" fill="{fur}"/><ellipse cx="{cx}" cy="{my}" rx="{mrx}" ry="{mry}" fill="{muzzle}"/><circle cx="{lx}" cy="{eye_y}" r="{pr}" fill="#2d221c"/><circle cx="{rx2}" cy="{eye_y}" r="{pr}" fill="#2d221c"/><ellipse cx="{cx}" cy="{ny}" rx="{nrx}" ry="{nry}" fill="#2d221c"/><path d="M {mx1} {mouth_y} Q {cx} {curve_y} {mx2} {mouth_y}" stroke="#2d221c" stroke-width="3" fill="none" stroke-linecap="round"/>"##,
        lel = cx - rx * 0.75,
        rel = cx + rx * 0.75,
        ey = cy - ry,
        er = rx * 0.28,
        ir = rx * 0.14,
        cx = cx,
        cy = cy,
        rx = rx,
        ry = ry,
        fur = color_hex(fur),
        inner = color_hex(inner),
        my = cy + ry * 0.25,
        mrx = rx * 0.40,
        mry = ry * 0.34,
        muzzle = color_hex(muzzle),
        lx = cx - rx / 3.0,
        rx2 = cx + rx / 3.0,
        eye_y = cy - ry * 0.20,
        pr = rx * 0.10,
        ny = cy + ry * 0.16,
        nrx = rx * 0.13,
        nry = ry * 0.10,
        mx1 = cx - rx * 0.18,
        mx2 = cx + rx * 0.18,
        mouth_y = cy + ry * 0.30,
        curve_y = cy + ry * 0.42,
    )
}