You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.2 KiB

  1. // Copyright 2014 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package avatar
  5. import (
  6. "fmt"
  7. "image"
  8. "image/color/palette"
  9. "math/rand"
  10. "time"
  11. "github.com/issue9/identicon"
  12. )
  13. const AVATAR_SIZE = 290
  14. // RandomImage generates and returns a random avatar image unique to input data
  15. // in custom size (height and width).
  16. func RandomImageSize(size int, data []byte) (image.Image, error) {
  17. randExtent := len(palette.WebSafe) - 32
  18. rand.Seed(time.Now().UnixNano())
  19. colorIndex := rand.Intn(randExtent)
  20. backColorIndex := colorIndex - 1
  21. if backColorIndex < 0 {
  22. backColorIndex = randExtent - 1
  23. }
  24. // Define size, background, and forecolor
  25. imgMaker, err := identicon.New(size,
  26. palette.WebSafe[backColorIndex], palette.WebSafe[colorIndex:colorIndex+32]...)
  27. if err != nil {
  28. return nil, fmt.Errorf("identicon.New: %v", err)
  29. }
  30. return imgMaker.Make(data), nil
  31. }
  32. // RandomImage generates and returns a random avatar image unique to input data
  33. // in default size (height and width).
  34. func RandomImage(data []byte) (image.Image, error) {
  35. return RandomImageSize(AVATAR_SIZE, data)
  36. }