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_cactus_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.58;
    let body_w = w * (0.13 + identity.unit_f32(4) * 0.04);
    let body_h = h * (0.36 + identity.unit_f32(5) * 0.10);
    let top_y = cy - body_h / 2.0;
    let cactus = hsl_to_color(105.0 + identity.unit_f32(1) * 60.0, 0.42, 0.42);
    let flower = hsl_to_color(320.0 + identity.unit_f32(3) * 55.0, 0.58, 0.64);
    format!(
        r##"<rect x="{bx}" y="{by}" width="{bw}" height="{bh}" rx="{br}" fill="{cactus}"/><circle cx="{cx}" cy="{by}" r="{br}" fill="{cactus}"/><rect x="{lax}" y="{lay}" width="{al}" height="{ah}" rx="{ar}" fill="{cactus}"/><circle cx="{lax}" cy="{lcy}" r="{ar}" fill="{cactus}"/><rect x="{rax}" y="{ray}" width="{al}" height="{ah}" rx="{ar}" fill="{cactus}"/><circle cx="{rcx}" cy="{rcy}" r="{ar}" fill="{cactus}"/><line x1="{n1x}" y1="{n1y}" x2="{n2x}" y2="{n2y}" stroke="#f2ffe0" stroke-width="2" opacity="0.7"/><line x1="{n3x}" y1="{n3y}" x2="{n4x}" y2="{n4y}" stroke="#f2ffe0" stroke-width="2" opacity="0.7"/><circle cx="{cx}" cy="{fy}" r="{fr}" fill="{flower}"/>"##,
        bx = cx - body_w / 2.0,
        by = top_y,
        bw = body_w,
        bh = body_h,
        br = body_w / 2.0,
        cactus = color_hex(cactus),
        lax = cx - body_w * 1.45,
        lay = cy - body_h * 0.13,
        lcy = cy - body_h * 0.13 + body_w * 0.25,
        rax = cx + body_w * 0.35,
        ray = cy - body_h * 0.23,
        rcx = cx + body_w * 1.45,
        rcy = cy - body_h * 0.23 + body_w * 0.25,
        al = body_w * 1.10,
        ah = body_w * 0.50,
        ar = body_w * 0.25,
        n1x = cx - body_w * 0.12,
        n1y = top_y + body_h * 0.34,
        n2x = cx - body_w * 0.34,
        n2y = top_y + body_h * 0.29,
        n3x = cx + body_w * 0.10,
        n3y = top_y + body_h * 0.58,
        n4x = cx + body_w * 0.33,
        n4y = top_y + body_h * 0.54,
        fy = top_y - body_w * 0.42,
        fr = body_w * (0.16 + identity.unit_f32(12) * 0.08),
        flower = color_hex(flower),
    )
}