44 "image"
55
66 "github.com/FloatTech/gg"
7- "github.com/FloatTech/imgfactory"
87)
98
109// DrawTitle 绘制标题
@@ -24,7 +23,7 @@ func (t *Title) DrawTitle() (imgs image.Image, err error) {
2423 canvas .SetRGBA255 (0 , 0 , 0 , 153 )
2524 canvas .Fill ()
2625
27- fontsize1 , fontsize2 := 108.0 + t .TitleFontOffsetPoint , 54.0 + t .TextFontOffsetPoint
26+ fontsize1 , fontsize2 , fontsize3 := 108.0 + t .TitleFontOffsetPoint , 72 + t . TextFontOffsetPoint , 54.0 + t .TextFontOffsetPoint
2827 // 加载size为108的字体
2928 err = canvas .ParseFontFace (t .TitleFontData , fontsize1 )
3029 if err != nil {
@@ -33,37 +32,35 @@ func (t *Title) DrawTitle() (imgs image.Image, err error) {
3332
3433 // 绘制标题
3534 canvas .SetRGBA255 (250 , 250 , 250 , 255 )
36- stringwight , _ := canvas .MeasureString (t .LeftTitle )
37- canvas .DrawStringAnchored (t .LeftTitle , (220 - (fontsize1 + fontsize2 )* 72 / 96 )* 0.33 + stringwight / 2 + t .OffsetX , 30 + 40 + (220 - (fontsize1 + fontsize2 )* 72 / 96 )* 0.33 + fontsize1 * 72 / 96 * 0.5 + t .OffsetY , 0.5 , 0.5 )
35+ canvas .DrawStringAnchored (t .LeftTitle , (220 - fontsize1 - fontsize3 )/ 3 + t .OffsetX , 30 + 40 + (220 - fontsize1 - fontsize3 )/ 3 + fontsize1 / 2 + t .OffsetY , 0 , 0.5 )
3836
3937 // 加载size为54的字体
40- err = canvas .ParseFontFace (t .TextFontData , fontsize2 )
38+ err = canvas .ParseFontFace (t .TextFontData , fontsize3 )
4139 if err != nil {
4240 return
4341 }
4442
4543 canvas .SetRGBA255 (250 , 250 , 250 , 255 )
4644 // 绘制副标题
47- stringwight , _ = canvas .MeasureString (t .LeftSubtitle )
48- canvas .DrawStringAnchored (t .LeftSubtitle , 3 + (220 - (fontsize1 + fontsize2 )* 72 / 96 )* 0.33 + stringwight / 2 + t .OffsetX , 30 + 40 + (220 - (fontsize1 + fontsize2 )* 72 / 96 )* 0.66 + fontsize1 * 72 / 96 + fontsize2 * 72 / 96 * 0.5 + t .OffsetY , 0.5 , 0.5 )
45+ canvas .DrawStringAnchored (t .LeftSubtitle , 3 + (220 - fontsize1 - fontsize3 )/ 3 + t .OffsetX , 30 + 40 + (220 - fontsize1 - fontsize3 )/ 3 * 2 + fontsize1 + fontsize3 / 2 + t .OffsetY , 0 , 0.5 )
4946
50- // 加载icon并绘制
51- var icon * imgfactory. Factory
52- icon , err = imgfactory . LoadFirstFrame (t .ImagePath , 220 , 220 )
47+ // 加载icon并绘制 高限制220
48+ var icon image. Image
49+ icon , err = gg . LoadImage (t .ImagePath )
5350 if err != nil {
5451 return
5552 }
56- canvas .DrawImage (icon .Image (), int (DefaultWidth )- icon .W (), 40 + 30 )
53+ sc := 220 / float64 (icon .Bounds ().Dy ())
54+ canvas .ScaleAbout (sc , sc , DefaultWidth - float64 (icon .Bounds ().Dx ())* sc / 2 , 40 + 30 + 220 / 2 )
55+ canvas .DrawImageAnchored (icon , int (DefaultWidth )- int (float64 (icon .Bounds ().Dx ())* sc / 2 ), 40 + 30 + 220 / 2 , 0.5 , 0.5 )
56+ canvas .Identity ()
5757 // 加载size为72的字体
58- fontsize1 = 72 + t .TextFontOffsetPoint
59- err = canvas .ParseFontFace (t .TextFontData , fontsize1 )
58+ err = canvas .ParseFontFace (t .TextFontData , fontsize2 )
6059 if err != nil {
6160 return
6261 }
63- stringwight , _ = canvas .MeasureString (t .RightTitle )
64- canvas .DrawStringAnchored (t .RightTitle , DefaultWidth - 25 - float64 (icon .W ())- stringwight / 2 + t .OffsetX , 30 + 40 + (220 - fontsize1 * 72 / 96 * 2 )* 0.33 + fontsize1 * 72 / 96 * 0.5 + t .OffsetY , 0.5 , 0.5 )
65- stringwight , _ = canvas .MeasureString (t .RightSubtitle )
66- canvas .DrawStringAnchored (t .RightSubtitle , DefaultWidth - 25 - float64 (icon .W ())- stringwight / 2 + t .OffsetX , 30 + 40 + (220 - fontsize1 * 72 / 96 * 2 )* 0.66 + fontsize1 * 72 / 96 * 1.5 + t .OffsetY , 0.5 , 0.5 )
62+ canvas .DrawStringAnchored (t .RightTitle , DefaultWidth - float64 (icon .Bounds ().Dx ())* sc - 25 + t .OffsetX , 30 + 40 + (220 - fontsize2 * 2 )/ 3 + fontsize2 / 2 + t .OffsetY , 1 , 0.5 )
63+ canvas .DrawStringAnchored (t .RightSubtitle , DefaultWidth - float64 (icon .Bounds ().Dx ())* sc - 25 + t .OffsetX , 30 + 40 + (220 - fontsize2 * 2 )/ 3 * 2 + fontsize2 + fontsize2 / 2 + t .OffsetY , 1 , 0.5 )
6764
6865 imgs = canvas .Image ()
6966 return
@@ -83,15 +80,24 @@ func (t *Title) DrawTitleWithText(info []string) (imgs image.Image, err error) {
8380 canvas .Clear ()
8481
8582 // 加载icon
86- var icon * imgfactory. Factory
87- icon , err = imgfactory . LoadFirstFrame (t .ImagePath , 512 , 512 )
83+ var icon image. Image
84+ icon , err = gg . LoadImage (t .ImagePath )
8885 if err != nil {
8986 return
9087 }
91- canvas .DrawImage (icon .Image (), DefaultWidth - icon .W (), imgh - icon .H ())
88+ sc := 0.0
89+ if float64 (icon .Bounds ().Dy ())/ float64 (icon .Bounds ().Dx ()) >= 1 {
90+ sc = DefaultWidth / 2 / float64 (icon .Bounds ().Dy ())
91+ } else {
92+ sc = DefaultWidth / 2 / float64 (icon .Bounds ().Dx ())
93+ }
94+ canvas .ScaleAbout (sc , sc , float64 (canvas .W ()), float64 (canvas .H ()))
95+ canvas .DrawImageAnchored (icon , canvas .W (), canvas .H (), 1 , 1 )
96+ canvas .Identity ()
9297
9398 // 加载size为108的字体
9499 fontsize1 , fontsize2 := 108.0 + t .TitleFontOffsetPoint , 54.0 + t .TextFontOffsetPoint
100+ fsp1 , fsp2 := fontsize1 * 72 / 96 , fontsize2 * 72 / 96
95101 err = canvas .ParseFontFace (t .TitleFontData , fontsize1 )
96102 if err != nil {
97103 return
@@ -100,8 +106,7 @@ func (t *Title) DrawTitleWithText(info []string) (imgs image.Image, err error) {
100106 canvas .SetRGBA255 (15 , 15 , 15 , 255 )
101107
102108 // 绘制标题
103- stringwight , _ := canvas .MeasureString (t .LeftTitle )
104- canvas .DrawStringAnchored (t .LeftTitle , 25 + stringwight / 2 + t .OffsetX , 25 + fontsize1 * 72 / 96 * 0.5 + t .OffsetY , 0.5 , 0.5 )
109+ canvas .DrawStringAnchored (t .LeftTitle , 25 + t .OffsetX , 25 + fsp1 / 2 + t .OffsetY , 0 , 0.5 )
105110
106111 // 加载size为54的字体
107112 err = canvas .ParseFontFace (t .TextFontData , fontsize2 )
@@ -110,10 +115,9 @@ func (t *Title) DrawTitleWithText(info []string) (imgs image.Image, err error) {
110115 }
111116
112117 // 绘制一系列标题
113- stringwight , _ = canvas .MeasureString (t .LeftSubtitle )
114- canvas .DrawStringAnchored (t .LeftSubtitle , 25 + 3 + stringwight / 2 + t .OffsetX , 25 + fontsize1 * 72 / 96 + 25 + fontsize2 * 72 / 96 * 0.5 + t .OffsetY , 0.5 , 0.5 )
115-
116- canvas .DrawRectangle (25 + 3 + t .OffsetX , 25 + fontsize1 * 72 / 96 + 25 + fontsize2 * 72 / 96 + 7 + t .OffsetY , stringwight , 6 )
118+ canvas .DrawStringAnchored (t .LeftSubtitle , 25 + 3 + t .OffsetX , 25 + fsp1 + 25 + fsp2 / 2 + t .OffsetY , 0 , 0.5 )
119+ stringwight , _ := canvas .MeasureString (t .LeftSubtitle )
120+ canvas .DrawRectangle (25 + 3 + t .OffsetX , 25 + fsp1 + 25 + fsp2 + 7 + t .OffsetY , stringwight , 6 )
117121 // 绘制插件开启状态
118122 if t .IsEnabled {
119123 canvas .SetRGBA255 (35 , 235 , 35 , 255 )
@@ -129,18 +133,16 @@ func (t *Title) DrawTitleWithText(info []string) (imgs image.Image, err error) {
129133 return
130134 }
131135
132- stringwight , _ = canvas .MeasureString (t .RightTitle )
133- canvas .DrawStringAnchored (t .RightTitle , DefaultWidth - 40 - stringwight / 2 + t .OffsetX , 40 + fontsize2 * 72 / 96 * 0.5 + t .OffsetY , 0.5 , 0.5 )
134- stringwight , _ = canvas .MeasureString (t .RightSubtitle )
135- canvas .DrawStringAnchored (t .RightSubtitle , DefaultWidth - 40 - stringwight / 2 + t .OffsetX , 40 + 25 + fontsize2 * 72 / 96 * 1.5 + t .OffsetY , 0.5 , 0.5 )
136+ canvas .DrawStringAnchored (t .RightTitle , DefaultWidth - 40 + t .OffsetX , 40 + fsp2 / 2 + t .OffsetY , 1 , 0.5 )
137+ canvas .DrawStringAnchored (t .RightSubtitle , DefaultWidth - 40 + t .OffsetX , 40 + fsp2 + 25 + fsp2 / 2 + t .OffsetY , 1 , 0.5 )
136138
137139 // 加载size为38的字体
138140 err = canvas .ParseFontFace (t .TextFontData , 38 + t .TextFontOffsetPoint )
139141 if err != nil {
140142 return
141143 }
142144
143- y := 25 + fontsize1 * 72 / 96 + 25 + fontsize2 * 72 / 96
145+ y := 25 + fsp1 + 25 + fsp2
144146 for _ , text := range info {
145147 canvas .DrawString (text , 25.0 , y + canvas .FontHeight ()* 2 )
146148 y += 20 + canvas .FontHeight ()
@@ -154,14 +156,21 @@ func (t *Title) DrawCard() (imgs image.Image, err error) {
154156 recw , rech := 384.0 , 256.0
155157 canvas := gg .NewContext (int (recw ), int (rech ))
156158 // 绘制图片
157- var banner * imgfactory. Factory
158- banner , err = imgfactory . LoadFirstFrame (t .ImagePath , int ( recw ) * 2 , int ( rech ) * 2 )
159+ var banner image. Image
160+ banner , err = gg . LoadImage (t .ImagePath )
159161 if err == nil {
160- canvas .DrawImage (imgfactory .Size (banner .Image (), int (recw ), int (rech )).Image (), 0 , 0 )
162+ sc := 0.0
163+ if float64 (banner .Bounds ().Dy ())/ float64 (banner .Bounds ().Dx ()) < rech / recw {
164+ sc = rech / float64 (banner .Bounds ().Dy ())
165+ } else {
166+ sc = recw / float64 (banner .Bounds ().Dx ())
167+ }
168+ canvas .ScaleAbout (sc , sc , recw / 2 , rech / 2 )
169+ canvas .DrawImageAnchored (banner , int (recw )/ 2 , int (rech )/ 2 , 0.5 , 0.5 )
170+ canvas .Identity ()
161171 } else {
162- canvas .DrawRectangle (0 , 0 , recw , rech )
163172 canvas .SetRGB255 (RandJPColor ())
164- canvas .Fill ()
173+ canvas .Clear ()
165174 }
166175 if t .IsEnabled {
167176 canvas .DrawRectangle (0 , rech * 0.54 , recw , rech - rech * 0.54 )
@@ -174,17 +183,18 @@ func (t *Title) DrawCard() (imgs image.Image, err error) {
174183 // 绘制插件信息
175184 canvas .SetRGBA255 (240 , 240 , 240 , 255 )
176185 fontsize1 , fontsize2 := 64.0 + t .TitleFontOffsetPoint , 32.0 + t .TextFontOffsetPoint
186+ fsp1 , fsp2 := fontsize1 * 72 / 96 , fontsize2 * 72 / 96
177187 err = canvas .ParseFontFace (t .TitleFontData , fontsize1 )
178188 if err != nil {
179189 return
180190 }
181- canvas .DrawStringAnchored (t .LeftTitle , recw / 2 + t .OffsetX , rech * 0.54 + (rech - rech * 0.54 - (fontsize1 + fontsize2 ) * 72 / 96 ) * 0.33 + fontsize1 * 72 / 96 * 0.5 + t .OffsetY , 0.5 , 0.5 )
191+ canvas .DrawStringAnchored (t .LeftTitle , recw / 2 + t .OffsetX , rech * 0.54 + (rech - rech * 0.54 - (fsp1 + fsp2 )) / 3 + fsp1 / 2 + t .OffsetY , 0.5 , 0.5 )
182192
183193 err = canvas .ParseFontFace (t .TextFontData , fontsize2 )
184194 if err != nil {
185195 return
186196 }
187- canvas .DrawStringAnchored (t .LeftSubtitle , recw / 2 + t .OffsetX , rech * 0.54 + (rech - rech * 0.54 - (fontsize1 + fontsize2 ) * 72 / 96 ) * 0.66 + fontsize1 * 72 / 96 + fontsize2 * 72 / 96 * 0.5 + t .OffsetY , 0.5 , 0.5 )
197+ canvas .DrawStringAnchored (t .LeftSubtitle , recw / 2 + t .OffsetX , rech * 0.54 + (rech - rech * 0.54 - (fsp1 + fsp2 )) / 3 * 2 + fsp1 + fsp2 / 2 + t .OffsetY , 0.5 , 0.5 )
188198
189199 imgs = canvas .Image ()
190200 return
0 commit comments