gradient-avatar
Version:
Beautiful default avatars
31 lines (26 loc) • 1.3 kB
JavaScript
const stringHash = require('string-hash');
const hslTriad = require('hsl-triad');
const hslRgb = require('hsl-rgb');
const uniqueID = () => Math.floor(Math.random() * Date.now());
const avatar = (str, size) => {
const hash = stringHash(str);
const colors = hslTriad(hash % 360, 1, 0.5);
const color1 = hslRgb(colors[0][0], colors[0][1], colors[0][2]);
const color2 = hslRgb(colors[1][0], colors[1][1], colors[1][2]);
const color1str = `rgb(${ color1[0] }, ${ color1[1] }, ${ color1[2] })`;
const color2str = `rgb(${ color2[0] }, ${ color2[1] }, ${ color2[2] })`;
const id = uniqueID();
return `<?xml version="1.0" encoding="UTF-8"?>
<svg ${ size != undefined ? `width="${size}px" height="${size}px"` : '' } viewBox="0 0 80 80" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient x1="0%" y1="0%" x2="100%" y2="100%" id="${id}">
<stop stop-color="${color1str}" offset="0%"></stop>
<stop stop-color="${color2str}" offset="100%"></stop>
</linearGradient>
</defs>
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<rect id="Rectangle" fill="url(#${id})" x="0" y="0" width="80" height="80"></rect>
</g>
</svg>`;
};
module.exports = avatar;