This repository has been archived on 2023-08-30. You can view files and clone it, but cannot push or open issues/pull-requests.
bytedo
/
wcui
Archived
1
0
Fork 0
wcui/js/lib/avatar/avatar.js

92 lines
2.3 KiB
JavaScript
Raw Normal View History

2017-03-30 01:40:59 +08:00
/**
*
* @authors yutent (yutent@doui.cc)
* @date 2017-03-17 20:55:57
*
*/
"use strict";
// 1216fc0c668c09ade029ceae6db87f97cf560e21
define(function(){
var Avatar = function(){
this.sum = function(arr){
var sum = 0;
arr.forEach(function(it){
sum -= -it
})
}
};
Avatar.prototype = {
get: function(hash, size){
if(!hash)
return this.defafultImg;
if(!size || size < 100){
size = 100
}
var cv = document.createElement('canvas'),
ct = cv.getContext('2d'),
bg = hash.slice(-3),
color = hash.slice(-9, -6),
fixColor = color,
lens = hash.slice(0, 8).match(/([\w]{1})/g),
pos1 = hash.slice(8, 16).match(/([\w]{1})/g),
pos2 = hash.slice(16, 24).match(/([\w]{1})/g),
step = size / 10;
cv.width = size;
cv.height = size;
lens = lens.map(c => {
c = parseInt(c, 16);
return c % 8
})
pos1 = pos1.map(c => {
c = parseInt(c, 16);
return c % 4
})
pos2 = pos2.map(c => {
c = parseInt(c, 16);
return c % 4
})
fixColor = this.sum(lens) > 32 ? bg : color;
ct.fillStyle = '#' + bg;
ct.fillRect(0, 0, size, size)
for(var i = 1; i < 9; i++){
var xl = lens[i-1],
xp1 = pos1[i-1],
xp2 = pos2[i-1];
if(xl + xp1 > 8){
xl = 8 - xp1
}
ct.fillStyle = '#' + color;
ct.fillRect((xp1 + 1) * step, i * step, xl * step, step)
ct.fillStyle = '#' + color;
ct.fillRect((9 - xp1 - xl) * step, i * step, xl * step, step)
ct.fillStyle = '#' + fixColor;
ct.fillRect((xp2 + 1) * step, i * step, step, step)
ct.fillStyle = '#' + fixColor;
ct.fillRect((8 - xp2) * step, i * step, step, step)
}
return cv.toDataURL()
}
}
return new Avatar()
})