aboutsummaryrefslogtreecommitdiff
path: root/pkg/avatar/avatar.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/avatar/avatar.go')
-rw-r--r--pkg/avatar/avatar.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/pkg/avatar/avatar.go b/pkg/avatar/avatar.go
new file mode 100644
index 00000000..a8c3826d
--- /dev/null
+++ b/pkg/avatar/avatar.go
@@ -0,0 +1,43 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package avatar
+
+import (
+ "fmt"
+ "image"
+ "image/color/palette"
+ "math/rand"
+ "time"
+
+ "github.com/issue9/identicon"
+)
+
+const AVATAR_SIZE = 290
+
+// RandomImage generates and returns a random avatar image unique to input data
+// in custom size (height and width).
+func RandomImageSize(size int, 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
+ }
+
+ // Define size, background, and forecolor
+ imgMaker, err := identicon.New(size,
+ palette.WebSafe[backColorIndex], palette.WebSafe[colorIndex:colorIndex+32]...)
+ if err != nil {
+ return nil, fmt.Errorf("identicon.New: %v", err)
+ }
+ return imgMaker.Make(data), nil
+}
+
+// RandomImage generates and returns a random avatar image unique to input data
+// in default size (height and width).
+func RandomImage(data []byte) (image.Image, error) {
+ return RandomImageSize(AVATAR_SIZE, data)
+}