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_diamond_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.25;
    let ry = h * 0.30;
    let gem = hsl_to_color(180.0 + identity.unit_f32(1) * 95.0, 0.55, 0.60);
    let highlight = hsl_to_color(190.0 + identity.unit_f32(2) * 70.0, 0.40, 0.82);
    let shade = hsl_to_color(200.0 + identity.unit_f32(3) * 70.0, 0.42, 0.42);
    let outer = format!(
        "{},{} {},{} {},{} {},{} {},{}",
        cx - rx,
        cy - ry / 3.0,
        cx - rx / 2.0,
        cy - ry,
        cx + rx / 2.0,
        cy - ry,
        cx + rx,
        cy - ry / 3.0,
        cx,
        cy + ry
    );
    let left = format!(
        "{},{} {},{} {},{} {},{}",
        cx - rx,
        cy - ry / 3.0,
        cx - rx / 2.0,
        cy - ry,
        cx,
        cy + ry,
        cx - rx / 5.0,
        cy - ry / 3.0
    );
    let right = format!(
        "{},{} {},{} {},{} {},{}",
        cx + rx / 2.0,
        cy - ry,
        cx + rx,
        cy - ry / 3.0,
        cx,
        cy + ry,
        cx + rx / 5.0,
        cy - ry / 3.0
    );
    format!(
        r##"<polygon points="{outer}" fill="{gem}"/><polygon points="{left}" fill="{highlight}"/><polygon points="{right}" fill="{shade}"/><line x1="{l1}" y1="{top}" x2="{cx}" y2="{bottom}" stroke="#ffffff" stroke-width="2" opacity="0.45"/><line x1="{cx}" y1="{top}" x2="{cx}" y2="{bottom}" stroke="#ffffff" stroke-width="2" opacity="0.45"/><line x1="{r1}" y1="{top}" x2="{cx}" y2="{bottom}" stroke="#ffffff" stroke-width="2" opacity="0.45"/>"##,
        outer = outer,
        gem = color_hex(gem),
        left = left,
        right = right,
        highlight = color_hex(highlight),
        shade = color_hex(shade),
        l1 = cx - rx / 2.0,
        r1 = cx + rx / 2.0,
        top = cy - ry,
        bottom = cy + ry,
        cx = cx,
    )
}