Skip to content

Commit 57e210b

Browse files
committed
better builtin avatar generator
1 parent d1f5584 commit 57e210b

File tree

19 files changed

+421
-376
lines changed

19 files changed

+421
-376
lines changed

build/codeformat/formatimports_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import (
5050
"bytes"
5151
"fmt"
5252
"image"
53-
"image/color/palette"
53+
"image/color"
5454
5555
_ "image/gif" // for processing gif images
5656
_ "image/jpeg" // for processing jpeg images
@@ -76,7 +76,7 @@ import (
7676
"bytes"
7777
"fmt"
7878
"image"
79-
"image/color/palette"
79+
"image/color"
8080
8181
_ "image/gif" // for processing gif images
8282
_ "image/jpeg" // for processing jpeg images

go.mod

-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ require (
6363
github.com/hashicorp/go-version v1.3.1
6464
github.com/hashicorp/golang-lru v0.5.4
6565
github.com/huandu/xstrings v1.3.2
66-
github.com/issue9/identicon v1.2.0
6766
github.com/jaytaylor/html2text v0.0.0-20200412013138-3577fbdbcff7
6867
github.com/json-iterator/go v1.1.11
6968
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51

go.sum

-4
Original file line numberDiff line numberDiff line change
@@ -661,10 +661,6 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
661661
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
662662
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
663663
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
664-
github.com/issue9/assert v1.4.1 h1:gUtOpMTeaE4JTe9kACma5foOHBvVt1p5XTFrULDwdXI=
665-
github.com/issue9/assert v1.4.1/go.mod h1:Yktk83hAVl1SPSYtd9kjhBizuiBIqUQyj+D5SE2yjVY=
666-
github.com/issue9/identicon v1.2.0 h1:ek+UcTTyMW/G0iNbLOAlrPC13eSzXTWhbJSs8PHhHGQ=
667-
github.com/issue9/identicon v1.2.0/go.mod h1:A9toNT0ky/1WP5iNFyDmrkNiYH6eX3HcN5V6uH0g0ec=
668664
github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0=
669665
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
670666
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=

modules/avatar/avatar.go

+4-17
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,15 @@ import (
88
"bytes"
99
"fmt"
1010
"image"
11-
"image/color/palette"
11+
"image/color"
1212

1313
_ "image/gif" // for processing gif images
1414
_ "image/jpeg" // for processing jpeg images
1515
_ "image/png" // for processing png images
1616

17+
"code.gitea.io/gitea/modules/avatar/identicon"
1718
"code.gitea.io/gitea/modules/setting"
18-
"code.gitea.io/gitea/modules/util"
1919

20-
"github.com/issue9/identicon"
2120
"github.com/nfnt/resize"
2221
"github.com/oliamb/cutter"
2322
)
@@ -28,20 +27,8 @@ const AvatarSize = 290
2827
// RandomImageSize generates and returns a random avatar image unique to input data
2928
// in custom size (height and width).
3029
func RandomImageSize(size int, data []byte) (image.Image, error) {
31-
randExtent := len(palette.WebSafe) - 32
32-
integer, err := util.RandomInt(int64(randExtent))
33-
if err != nil {
34-
return nil, fmt.Errorf("util.RandomInt: %v", err)
35-
}
36-
colorIndex := int(integer)
37-
backColorIndex := colorIndex - 1
38-
if backColorIndex < 0 {
39-
backColorIndex = randExtent - 1
40-
}
41-
42-
// Define size, background, and forecolor
43-
imgMaker, err := identicon.New(size,
44-
palette.WebSafe[backColorIndex], palette.WebSafe[colorIndex:colorIndex+32]...)
30+
// we use white as background, and use dark colors to draw blocks
31+
imgMaker, err := identicon.New(size, color.White, identicon.DarkColors...)
4532
if err != nil {
4633
return nil, fmt.Errorf("identicon.New: %v", err)
4734
}

vendor/github.com/issue9/identicon/block.go modules/avatar/identicon/block.go

+21-22
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,24 @@
1-
// SPDX-License-Identifier: MIT
1+
// Copyright 2021 The Gitea 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.
24

35
package identicon
46

57
import "image"
68

79
var (
8-
// 可以出现在中间的方块,一般为了美观,都是对称图像。
10+
// the blocks can appear in center, these blocks can be more beautiful
911
centerBlocks = []blockFunc{b0, b1, b2, b3, b19, b26, b27}
1012

11-
// 所有方块
13+
// all blocks
1214
blocks = []blockFunc{b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27}
1315
)
1416

15-
// 所有 block 函数的类型
1617
type blockFunc func(img *image.Paletted, x, y, size int, angle int)
1718

18-
// 将多边形 points 旋转 angle 个角度,然后输出到 img 上,起点为 x,y 坐标
19-
//
20-
// points 中的坐标是基于左上角是原点的坐标系。
19+
// draw a polygon by points, and the polygon is rotated by angle.
2120
func drawBlock(img *image.Paletted, x, y, size int, angle int, points []int) {
22-
if angle > 0 { // 0 角度不需要转换
21+
if angle > 0 {
2322
m := size / 2
2423
rotate(points, m, m, angle)
2524
}
@@ -33,7 +32,7 @@ func drawBlock(img *image.Paletted, x, y, size int, angle int, points []int) {
3332
}
3433
}
3534

36-
// 全空白
35+
// blank
3736
//
3837
// --------
3938
// | |
@@ -42,7 +41,7 @@ func drawBlock(img *image.Paletted, x, y, size int, angle int, points []int) {
4241
// --------
4342
func b0(img *image.Paletted, x, y, size int, angle int) {}
4443

45-
// 全填充正方形
44+
// full-filled
4645
//
4746
// --------
4847
// |######|
@@ -57,7 +56,7 @@ func b1(img *image.Paletted, x, y, size int, angle int) {
5756
}
5857
}
5958

60-
// 中间小方块
59+
// a small block
6160
// ----------
6261
// | |
6362
// | #### |
@@ -66,8 +65,8 @@ func b1(img *image.Paletted, x, y, size int, angle int) {
6665
// ----------
6766
func b2(img *image.Paletted, x, y, size int, angle int) {
6867
l := size / 4
69-
x = x + l
70-
y = y + l
68+
x += l
69+
y += l
7170

7271
for i := x; i < x+2*l; i++ {
7372
for j := y; j < y+2*l; j++ {
@@ -76,7 +75,7 @@ func b2(img *image.Paletted, x, y, size int, angle int) {
7675
}
7776
}
7877

79-
// 菱形
78+
// diamond
8079
//
8180
// ---------
8281
// | # |
@@ -133,7 +132,7 @@ func b5(img *image.Paletted, x, y, size int, angle int) {
133132
})
134133
}
135134

136-
// b6 矩形
135+
// b6
137136
//
138137
// --------
139138
// |### |
@@ -151,7 +150,7 @@ func b6(img *image.Paletted, x, y, size int, angle int) {
151150
})
152151
}
153152

154-
// b7 斜放的锥形
153+
// b7 italic cone
155154
//
156155
// ---------
157156
// | # |
@@ -170,7 +169,7 @@ func b7(img *image.Paletted, x, y, size int, angle int) {
170169
})
171170
}
172171

173-
// b8 三个堆叠的三角形
172+
// b8 three small triangles
174173
//
175174
// -----------
176175
// | # |
@@ -184,23 +183,23 @@ func b8(img *image.Paletted, x, y, size int, angle int) {
184183
m := size / 2
185184
mm := m / 2
186185

187-
// 顶部三角形
186+
// top
188187
drawBlock(img, x, y, size, angle, []int{
189188
m, 0,
190189
3 * mm, m,
191190
mm, m,
192191
m, 0,
193192
})
194193

195-
// 底下左边
194+
// bottom left
196195
drawBlock(img, x, y, size, angle, []int{
197196
mm, m,
198197
m, size,
199198
0, size,
200199
mm, m,
201200
})
202201

203-
// 底下右边
202+
// bottom right
204203
drawBlock(img, x, y, size, angle, []int{
205204
3 * mm, m,
206205
size, size,
@@ -209,7 +208,7 @@ func b8(img *image.Paletted, x, y, size int, angle int) {
209208
})
210209
}
211210

212-
// b9 斜靠的三角形
211+
// b9 italic triangle
213212
//
214213
// ---------
215214
// |# |
@@ -257,7 +256,7 @@ func b10(img *image.Paletted, x, y, size int, angle int) {
257256
})
258257
}
259258

260-
// b11 左上角1/4大小的方块
259+
// b11
261260
//
262261
// ----------
263262
// |#### |

modules/avatar/identicon/colors.go

+135
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
// Copyright 2021 The Gitea 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+
5+
package identicon
6+
7+
import "image/color"
8+
9+
// DarkColors are dark colors for avatar blocks, they come from image/color/palette.WebSafe, and light colors (0xff) are removed
10+
var DarkColors = []color.Color{
11+
color.RGBA{0x00, 0x00, 0x33, 0xff},
12+
color.RGBA{0x00, 0x00, 0x66, 0xff},
13+
color.RGBA{0x00, 0x00, 0x99, 0xff},
14+
color.RGBA{0x00, 0x00, 0xcc, 0xff},
15+
color.RGBA{0x00, 0x33, 0x00, 0xff},
16+
color.RGBA{0x00, 0x33, 0x33, 0xff},
17+
color.RGBA{0x00, 0x33, 0x66, 0xff},
18+
color.RGBA{0x00, 0x33, 0x99, 0xff},
19+
color.RGBA{0x00, 0x33, 0xcc, 0xff},
20+
color.RGBA{0x00, 0x66, 0x00, 0xff},
21+
color.RGBA{0x00, 0x66, 0x33, 0xff},
22+
color.RGBA{0x00, 0x66, 0x66, 0xff},
23+
color.RGBA{0x00, 0x66, 0x99, 0xff},
24+
color.RGBA{0x00, 0x66, 0xcc, 0xff},
25+
color.RGBA{0x00, 0x99, 0x00, 0xff},
26+
color.RGBA{0x00, 0x99, 0x33, 0xff},
27+
color.RGBA{0x00, 0x99, 0x66, 0xff},
28+
color.RGBA{0x00, 0x99, 0x99, 0xff},
29+
color.RGBA{0x00, 0x99, 0xcc, 0xff},
30+
color.RGBA{0x00, 0xcc, 0x00, 0xff},
31+
color.RGBA{0x00, 0xcc, 0x33, 0xff},
32+
color.RGBA{0x00, 0xcc, 0x66, 0xff},
33+
color.RGBA{0x00, 0xcc, 0x99, 0xff},
34+
color.RGBA{0x00, 0xcc, 0xcc, 0xff},
35+
color.RGBA{0x33, 0x00, 0x00, 0xff},
36+
color.RGBA{0x33, 0x00, 0x33, 0xff},
37+
color.RGBA{0x33, 0x00, 0x66, 0xff},
38+
color.RGBA{0x33, 0x00, 0x99, 0xff},
39+
color.RGBA{0x33, 0x00, 0xcc, 0xff},
40+
color.RGBA{0x33, 0x33, 0x00, 0xff},
41+
color.RGBA{0x33, 0x33, 0x33, 0xff},
42+
color.RGBA{0x33, 0x33, 0x66, 0xff},
43+
color.RGBA{0x33, 0x33, 0x99, 0xff},
44+
color.RGBA{0x33, 0x33, 0xcc, 0xff},
45+
color.RGBA{0x33, 0x66, 0x00, 0xff},
46+
color.RGBA{0x33, 0x66, 0x33, 0xff},
47+
color.RGBA{0x33, 0x66, 0x66, 0xff},
48+
color.RGBA{0x33, 0x66, 0x99, 0xff},
49+
color.RGBA{0x33, 0x66, 0xcc, 0xff},
50+
color.RGBA{0x33, 0x99, 0x00, 0xff},
51+
color.RGBA{0x33, 0x99, 0x33, 0xff},
52+
color.RGBA{0x33, 0x99, 0x66, 0xff},
53+
color.RGBA{0x33, 0x99, 0x99, 0xff},
54+
color.RGBA{0x33, 0x99, 0xcc, 0xff},
55+
color.RGBA{0x33, 0xcc, 0x00, 0xff},
56+
color.RGBA{0x33, 0xcc, 0x33, 0xff},
57+
color.RGBA{0x33, 0xcc, 0x66, 0xff},
58+
color.RGBA{0x33, 0xcc, 0x99, 0xff},
59+
color.RGBA{0x33, 0xcc, 0xcc, 0xff},
60+
color.RGBA{0x66, 0x00, 0x00, 0xff},
61+
color.RGBA{0x66, 0x00, 0x33, 0xff},
62+
color.RGBA{0x66, 0x00, 0x66, 0xff},
63+
color.RGBA{0x66, 0x00, 0x99, 0xff},
64+
color.RGBA{0x66, 0x00, 0xcc, 0xff},
65+
color.RGBA{0x66, 0x33, 0x00, 0xff},
66+
color.RGBA{0x66, 0x33, 0x33, 0xff},
67+
color.RGBA{0x66, 0x33, 0x66, 0xff},
68+
color.RGBA{0x66, 0x33, 0x99, 0xff},
69+
color.RGBA{0x66, 0x33, 0xcc, 0xff},
70+
color.RGBA{0x66, 0x66, 0x00, 0xff},
71+
color.RGBA{0x66, 0x66, 0x33, 0xff},
72+
color.RGBA{0x66, 0x66, 0x66, 0xff},
73+
color.RGBA{0x66, 0x66, 0x99, 0xff},
74+
color.RGBA{0x66, 0x66, 0xcc, 0xff},
75+
color.RGBA{0x66, 0x99, 0x00, 0xff},
76+
color.RGBA{0x66, 0x99, 0x33, 0xff},
77+
color.RGBA{0x66, 0x99, 0x66, 0xff},
78+
color.RGBA{0x66, 0x99, 0x99, 0xff},
79+
color.RGBA{0x66, 0x99, 0xcc, 0xff},
80+
color.RGBA{0x66, 0xcc, 0x00, 0xff},
81+
color.RGBA{0x66, 0xcc, 0x33, 0xff},
82+
color.RGBA{0x66, 0xcc, 0x66, 0xff},
83+
color.RGBA{0x66, 0xcc, 0x99, 0xff},
84+
color.RGBA{0x66, 0xcc, 0xcc, 0xff},
85+
color.RGBA{0x99, 0x00, 0x00, 0xff},
86+
color.RGBA{0x99, 0x00, 0x33, 0xff},
87+
color.RGBA{0x99, 0x00, 0x66, 0xff},
88+
color.RGBA{0x99, 0x00, 0x99, 0xff},
89+
color.RGBA{0x99, 0x00, 0xcc, 0xff},
90+
color.RGBA{0x99, 0x33, 0x00, 0xff},
91+
color.RGBA{0x99, 0x33, 0x33, 0xff},
92+
color.RGBA{0x99, 0x33, 0x66, 0xff},
93+
color.RGBA{0x99, 0x33, 0x99, 0xff},
94+
color.RGBA{0x99, 0x33, 0xcc, 0xff},
95+
color.RGBA{0x99, 0x66, 0x00, 0xff},
96+
color.RGBA{0x99, 0x66, 0x33, 0xff},
97+
color.RGBA{0x99, 0x66, 0x66, 0xff},
98+
color.RGBA{0x99, 0x66, 0x99, 0xff},
99+
color.RGBA{0x99, 0x66, 0xcc, 0xff},
100+
color.RGBA{0x99, 0x99, 0x00, 0xff},
101+
color.RGBA{0x99, 0x99, 0x33, 0xff},
102+
color.RGBA{0x99, 0x99, 0x66, 0xff},
103+
color.RGBA{0x99, 0x99, 0x99, 0xff},
104+
color.RGBA{0x99, 0x99, 0xcc, 0xff},
105+
color.RGBA{0x99, 0xcc, 0x00, 0xff},
106+
color.RGBA{0x99, 0xcc, 0x33, 0xff},
107+
color.RGBA{0x99, 0xcc, 0x66, 0xff},
108+
color.RGBA{0x99, 0xcc, 0x99, 0xff},
109+
color.RGBA{0x99, 0xcc, 0xcc, 0xff},
110+
color.RGBA{0xcc, 0x00, 0x00, 0xff},
111+
color.RGBA{0xcc, 0x00, 0x33, 0xff},
112+
color.RGBA{0xcc, 0x00, 0x66, 0xff},
113+
color.RGBA{0xcc, 0x00, 0x99, 0xff},
114+
color.RGBA{0xcc, 0x00, 0xcc, 0xff},
115+
color.RGBA{0xcc, 0x33, 0x00, 0xff},
116+
color.RGBA{0xcc, 0x33, 0x33, 0xff},
117+
color.RGBA{0xcc, 0x33, 0x66, 0xff},
118+
color.RGBA{0xcc, 0x33, 0x99, 0xff},
119+
color.RGBA{0xcc, 0x33, 0xcc, 0xff},
120+
color.RGBA{0xcc, 0x66, 0x00, 0xff},
121+
color.RGBA{0xcc, 0x66, 0x33, 0xff},
122+
color.RGBA{0xcc, 0x66, 0x66, 0xff},
123+
color.RGBA{0xcc, 0x66, 0x99, 0xff},
124+
color.RGBA{0xcc, 0x66, 0xcc, 0xff},
125+
color.RGBA{0xcc, 0x99, 0x00, 0xff},
126+
color.RGBA{0xcc, 0x99, 0x33, 0xff},
127+
color.RGBA{0xcc, 0x99, 0x66, 0xff},
128+
color.RGBA{0xcc, 0x99, 0x99, 0xff},
129+
color.RGBA{0xcc, 0x99, 0xcc, 0xff},
130+
color.RGBA{0xcc, 0xcc, 0x00, 0xff},
131+
color.RGBA{0xcc, 0xcc, 0x33, 0xff},
132+
color.RGBA{0xcc, 0xcc, 0x66, 0xff},
133+
color.RGBA{0xcc, 0xcc, 0x99, 0xff},
134+
color.RGBA{0xcc, 0xcc, 0xcc, 0xff},
135+
}

0 commit comments

Comments
 (0)