aboutsummaryrefslogtreecommitdiff
path: root/internal/avatar/avatar.go
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2019-10-24 01:51:46 -0700
committerGitHub <noreply@github.com>2019-10-24 01:51:46 -0700
commit01c8df01ec0608f1f25b2f1444adabb98fa5ee8a (patch)
treef8a7e5dd8d2a8c51e1ce2cabb9d33571a93314dd /internal/avatar/avatar.go
parent613139e7bef81d3573e7988a47eb6765f3de347a (diff)
internal: move packages under this directory (#5836)
* Rename pkg -> internal * Rename routes -> route * Move route -> internal/route * Rename models -> db * Move db -> internal/db * Fix route2 -> route * Move cmd -> internal/cmd * Bump version
Diffstat (limited to 'internal/avatar/avatar.go')
-rw-r--r--internal/avatar/avatar.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/avatar/avatar.go b/internal/avatar/avatar.go
new file mode 100644
index 00000000..a8c3826d
--- /dev/null
+++ b/internal/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)
+}