2014-03-23 14:13:23 +04:00
// 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.
2014-03-23 08:24:09 +04:00
package avatar
import (
"fmt"
2014-03-23 11:55:27 +04:00
"image"
2015-08-09 06:46:10 +03:00
"image/color/palette"
"math/rand"
2014-03-23 08:24:09 +04:00
"time"
2014-03-23 11:55:27 +04:00
2015-09-27 00:54:02 +03:00
"github.com/issue9/identicon"
2014-03-23 08:24:09 +04:00
)
2016-11-25 11:37:04 +03:00
// AvatarSize returns avatar's size
const AvatarSize = 290
2015-08-09 06:46:10 +03:00
2016-11-25 11:37:04 +03:00
// RandomImageSize generates and returns a random avatar image unique to input data
2016-02-21 01:10:05 +03:00
// in custom size (height and width).
2016-02-15 07:14:55 +03:00
func RandomImageSize ( size int , data [ ] byte ) ( image . Image , error ) {
2015-08-09 06:46:10 +03:00
randExtent := len ( palette . WebSafe ) - 32
rand . Seed ( time . Now ( ) . UnixNano ( ) )
colorIndex := rand . Intn ( randExtent )
backColorIndex := colorIndex - 1
if backColorIndex < 0 {
backColorIndex = randExtent - 1
}
2016-02-15 07:14:55 +03:00
// Define size, background, and forecolor
imgMaker , err := identicon . New ( size ,
2015-08-09 06:46:10 +03:00
palette . WebSafe [ backColorIndex ] , palette . WebSafe [ colorIndex : colorIndex + 32 ] ... )
if err != nil {
2016-02-15 07:14:55 +03:00
return nil , fmt . Errorf ( "identicon.New: %v" , err )
2015-08-09 06:46:10 +03:00
}
return imgMaker . Make ( data ) , nil
}
2016-02-21 01:10:05 +03:00
// RandomImage generates and returns a random avatar image unique to input data
// in default size (height and width).
2016-02-15 07:14:55 +03:00
func RandomImage ( data [ ] byte ) ( image . Image , error ) {
2016-11-25 11:37:04 +03:00
return RandomImageSize ( AvatarSize , data )
2014-03-23 08:24:09 +04:00
}