Fixed 267U.pre2
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
/**
|
||||
* Identicon generator
|
||||
* https://en.wikipedia.org/wiki/Identicon
|
||||
*/ import * as p from "pureimage";
|
||||
import gen from "random-seed";
|
||||
const size = 128; // px
|
||||
const n = 5; // resolution
|
||||
const margin = size / 4;
|
||||
const colors = [
|
||||
[
|
||||
"#eb6f92",
|
||||
"#b4637a"
|
||||
],
|
||||
[
|
||||
"#f6c177",
|
||||
"#ea9d34"
|
||||
],
|
||||
[
|
||||
"#ebbcba",
|
||||
"#d7827e"
|
||||
],
|
||||
[
|
||||
"#9ccfd8",
|
||||
"#56949f"
|
||||
],
|
||||
[
|
||||
"#c4a7e7",
|
||||
"#907aa9"
|
||||
],
|
||||
[
|
||||
"#eb6f92",
|
||||
"#f6c177"
|
||||
],
|
||||
[
|
||||
"#eb6f92",
|
||||
"#ebbcba"
|
||||
],
|
||||
[
|
||||
"#eb6f92",
|
||||
"#31748f"
|
||||
],
|
||||
[
|
||||
"#eb6f92",
|
||||
"#9ccfd8"
|
||||
],
|
||||
[
|
||||
"#eb6f92",
|
||||
"#c4a7e7"
|
||||
],
|
||||
[
|
||||
"#f6c177",
|
||||
"#eb6f92"
|
||||
],
|
||||
[
|
||||
"#f6c177",
|
||||
"#ebbcba"
|
||||
],
|
||||
[
|
||||
"#f6c177",
|
||||
"#31748f"
|
||||
],
|
||||
[
|
||||
"#f6c177",
|
||||
"#9ccfd8"
|
||||
],
|
||||
[
|
||||
"#f6c177",
|
||||
"#c4a7e7"
|
||||
],
|
||||
[
|
||||
"#ebbcba",
|
||||
"#eb6f92"
|
||||
],
|
||||
[
|
||||
"#ebbcba",
|
||||
"#f6c177"
|
||||
],
|
||||
[
|
||||
"#ebbcba",
|
||||
"#31748f"
|
||||
],
|
||||
[
|
||||
"#ebbcba",
|
||||
"#9ccfd8"
|
||||
],
|
||||
[
|
||||
"#ebbcba",
|
||||
"#c4a7e7"
|
||||
],
|
||||
[
|
||||
"#31748f",
|
||||
"#eb6f92"
|
||||
],
|
||||
[
|
||||
"#31748f",
|
||||
"#f6c177"
|
||||
],
|
||||
[
|
||||
"#31748f",
|
||||
"#ebbcba"
|
||||
],
|
||||
[
|
||||
"#31748f",
|
||||
"#9ccfd8"
|
||||
],
|
||||
[
|
||||
"#31748f",
|
||||
"#c4a7e7"
|
||||
],
|
||||
[
|
||||
"#9ccfd8",
|
||||
"#eb6f92"
|
||||
],
|
||||
[
|
||||
"#9ccfd8",
|
||||
"#f6c177"
|
||||
],
|
||||
[
|
||||
"#9ccfd8",
|
||||
"#ebbcba"
|
||||
],
|
||||
[
|
||||
"#9ccfd8",
|
||||
"#31748f"
|
||||
],
|
||||
[
|
||||
"#9ccfd8",
|
||||
"#c4a7e7"
|
||||
],
|
||||
[
|
||||
"#c4a7e7",
|
||||
"#eb6f92"
|
||||
],
|
||||
[
|
||||
"#c4a7e7",
|
||||
"#f6c177"
|
||||
],
|
||||
[
|
||||
"#c4a7e7",
|
||||
"#ebbcba"
|
||||
],
|
||||
[
|
||||
"#c4a7e7",
|
||||
"#31748f"
|
||||
],
|
||||
[
|
||||
"#c4a7e7",
|
||||
"#9ccfd8"
|
||||
]
|
||||
];
|
||||
const actualSize = size - margin * 2;
|
||||
const cellSize = actualSize / n;
|
||||
const sideN = Math.floor(n / 2);
|
||||
/**
|
||||
* Generate buffer of an identicon by seed
|
||||
*/ export function genIdenticon(seed, stream) {
|
||||
const rand = gen.create(seed);
|
||||
const canvas = p.make(size, size, undefined);
|
||||
const ctx = canvas.getContext("2d");
|
||||
const bgColors = colors[rand(colors.length)];
|
||||
const bg = ctx.createLinearGradient(0, 0, size, size);
|
||||
bg.addColorStop(0, bgColors[0]);
|
||||
bg.addColorStop(1, bgColors[1]);
|
||||
ctx.fillStyle = bg;
|
||||
ctx.beginPath();
|
||||
ctx.fillRect(0, 0, size, size);
|
||||
ctx.fillStyle = "#ffffff";
|
||||
// side bitmap (filled by false)
|
||||
const side = new Array(sideN);
|
||||
for(let i = 0; i < side.length; i++){
|
||||
side[i] = new Array(n).fill(false);
|
||||
}
|
||||
// 1*n (filled by false)
|
||||
const center = new Array(n).fill(false);
|
||||
for(let x = 0; x < side.length; x++){
|
||||
for(let y = 0; y < side[x].length; y++){
|
||||
side[x][y] = rand(3) === 0;
|
||||
}
|
||||
}
|
||||
for(let i = 0; i < center.length; i++){
|
||||
center[i] = rand(3) === 0;
|
||||
}
|
||||
// Draw
|
||||
for(let x = 0; x < n; x++){
|
||||
for(let y = 0; y < n; y++){
|
||||
const isXCenter = x === (n - 1) / 2;
|
||||
if (isXCenter && !center[y]) continue;
|
||||
const isLeftSide = x < (n - 1) / 2;
|
||||
if (isLeftSide && !side[x][y]) continue;
|
||||
const isRightSide = x > (n - 1) / 2;
|
||||
if (isRightSide && !side[sideN - (x - sideN)][y]) continue;
|
||||
const actualX = margin + cellSize * x;
|
||||
const actualY = margin + cellSize * y;
|
||||
ctx.beginPath();
|
||||
ctx.fillRect(actualX, actualY, cellSize, cellSize);
|
||||
}
|
||||
}
|
||||
return p.encodePNGToStream(canvas, stream);
|
||||
}
|
||||
Reference in New Issue
Block a user