diff options
Diffstat (limited to 'modules/avatar/avatar.go')
-rw-r--r-- | modules/avatar/avatar.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/modules/avatar/avatar.go b/modules/avatar/avatar.go index 73daa213..49a501bf 100644 --- a/modules/avatar/avatar.go +++ b/modules/avatar/avatar.go @@ -19,9 +19,11 @@ import ( "errors" "fmt" "image" + "image/color/palette" "image/jpeg" "image/png" "io" + "math/rand" "net/http" "net/url" "os" @@ -32,6 +34,7 @@ import ( "github.com/nfnt/resize" + "github.com/gogits/gogs/modules/identicon" "github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/setting" ) @@ -59,6 +62,27 @@ func HashEmail(email string) string { return hex.EncodeToString(h.Sum(nil)) } +const _RANDOM_AVATAR_SIZE = 200 + +// RandomImage generates and returns a random avatar image. +func RandomImage(data []byte) (image.Image, error) { + randExtent := len(palette.WebSafe) - 32 + rand.Seed(time.Now().UnixNano()) + colorIndex := rand.Intn(randExtent) + backColorIndex := colorIndex - 1 + if backColorIndex < 0 { + backColorIndex = randExtent - 1 + } + + // Size, background, forecolor + imgMaker, err := identicon.New(_RANDOM_AVATAR_SIZE, + palette.WebSafe[backColorIndex], palette.WebSafe[colorIndex:colorIndex+32]...) + if err != nil { + return nil, err + } + return imgMaker.Make(data), nil +} + // Avatar represents the avatar object. type Avatar struct { Hash string |