@vechain/picasso
Version:
General purpose deterministic identity icon library in svg format, mostly for vechain thor addresses
57 lines • 5.14 kB
JavaScript
// see https://github.com/danfinlay/jazzicon
const MersenneTwister = require('mersenne-twister');
const defaultColors = [
'rgb(244, 67, 54)',
'rgb(233, 30, 99)',
'rgb(156, 39, 176)',
'rgb(103, 58, 183)',
'rgb(63, 81, 181)',
'rgb(33, 150, 243)',
'rgb(3, 169, 244)',
'rgb(0, 188, 212)',
'rgb(0, 150, 136)',
'rgb(76, 175, 80)',
'rgb(139, 195, 74)',
'rgb(205, 220, 57)',
'rgb(255, 193, 7)',
'rgb(255, 152, 0)',
'rgb(255, 87, 34)'
];
const hash = function (str) {
if (str.length === 0) {
return 0;
}
let h = 0;
for (let i = 0; i < str.length; i++) {
h = h * 31 + str.charCodeAt(i);
h = h % (Math.pow(2, 32));
}
return h;
};
export function picasso(content, colors) {
colors = colors || defaultColors;
const seed = hash(content);
const rand = new MersenneTwister(seed);
colors = colors.slice();
const genColor = () => {
const idx = Math.floor(colors.length * rand.random());
return colors.splice(idx, 1)[0];
};
const bgStr = `<rect fill="${genColor()}" width="100" height="100"/>`;
const style = `<style>.picasso circle{mix-blend-mode:soft-light;}</style>`;
let shapesStr = '';
const layers = 3;
const rs = [35, 40, 45, 50, 55, 60];
const cxs = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
const cys = [30, 40, 50, 60, 70];
for (let i = 0; i < layers; i++) {
const r = rs.splice(Math.floor(rs.length * rand.random()), 1)[0];
const cx = cxs.splice(Math.floor(cxs.length * rand.random()), 1)[0];
const cy = cys.splice(Math.floor(cys.length * rand.random()), 1)[0];
const fill = genColor();
shapesStr += `<circle r="${r}" cx="${cx}" cy="${cy}" fill="${fill}"/>`;
}
return `<svg version="1.1" xmlns="http://www.w3.org/2000/svg" class="picasso" width="100" height="100" viewBox="0 0 100 100">${style}${bgStr}${shapesStr}</svg>`;
}
export default picasso;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNENBQTRDO0FBRTVDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0FBRW5ELE1BQU0sYUFBYSxHQUFHO0lBQ2xCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQUMsQ0FBQTtBQUV2QixNQUFNLElBQUksR0FBRyxVQUFVLEdBQVc7SUFDOUIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNsQixPQUFPLENBQUMsQ0FBQTtLQUNYO0lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ1QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDakMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM5QixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBQSxDQUFDLEVBQUksRUFBRSxDQUFBLENBQUMsQ0FBQTtLQUNwQjtJQUNELE9BQU8sQ0FBQyxDQUFBO0FBQ1osQ0FBQyxDQUFBO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFlLEVBQUUsTUFBaUI7SUFDdEQsTUFBTSxHQUFHLE1BQU0sSUFBSSxhQUFhLENBQUE7SUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXRDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUE7SUFFdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO1FBQ2xCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUN0RCxPQUFPLE1BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BDLENBQUMsQ0FBQTtJQUVELE1BQU0sS0FBSyxHQUFHLGVBQWUsUUFBUSxFQUFFLDhCQUE4QixDQUFBO0lBQ3JFLE1BQU0sS0FBSyxHQUFHLDREQUE0RCxDQUFBO0lBQzFFLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQTtJQUNsQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ3hELE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRWhDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkUsTUFBTSxJQUFJLEdBQUcsUUFBUSxFQUFFLENBQUE7UUFFdkIsU0FBUyxJQUFJLGNBQWMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsSUFBSSxLQUFLLENBQUE7S0FDekU7SUFDRCxPQUFPLHdIQUF3SCxLQUFLLEdBQUcsS0FBSyxHQUFHLFNBQVMsUUFBUSxDQUFBO0FBQ3BLLENBQUM7QUFFRCxlQUFlLE9BQU8sQ0FBQSJ9