-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathutils.go
129 lines (117 loc) · 2.29 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package main
import (
"bytes"
"errors"
"fmt"
"github.com/golang/freetype"
"github.com/golang/freetype/truetype"
"image"
"image/jpeg"
"image/png"
"io"
"net/http"
"os"
"path/filepath"
"strings"
)
func GetFileType(filename string) FileType {
ext := filepath.Ext(filename)
if ext != "" {
switch strings.TrimPrefix(ext, ".") {
case "jpg":
return JPG
case "png":
return PNG
}
}
return NOT
}
func GetFileName(filename string) string {
ext := filepath.Ext(filename)
if ext != "" {
return filename[:len(filename)-len(ext)]
}
return filename
}
// 根据地址获取图片内容
func GetDataByUrl(url string) (image.Image, error) {
var img image.Image
res, err := http.Get(url)
if err != nil {
return nil, err
}
body := res.Body
defer func() {
_ = body.Close()
}()
data, err := io.ReadAll(body)
if err != nil {
return nil, err
}
if !strings.HasSuffix(url, ".jpg") && !strings.HasSuffix(url, ".jpeg") && !strings.HasSuffix(url, ".png") {
return nil, errors.New("image type is not support")
}
reader := bytes.NewReader(data)
if strings.HasSuffix(url, ".jpg") || strings.HasSuffix(url, ".jpeg") {
if img, err = jpeg.Decode(reader); err != nil {
if img, err = png.Decode(bytes.NewReader(data)); err != nil {
return nil, err
}
}
}
if strings.HasSuffix(url, ".png") {
if img, err = png.Decode(reader); err != nil {
return nil, err
}
}
return img, nil
}
func SaveFile(fileName string, pic *image.RGBA) error {
dstFile, err := os.Create(fileName)
if err != nil {
return err
}
defer func() {
_ = dstFile.Close()
}()
if err = png.Encode(dstFile, pic); err != nil {
return err
}
return nil
}
func LoadFont(path string) (*truetype.Font, error) {
fontBytes, err := os.ReadFile(path) // 读取字体文件
if err != nil {
return nil, err
}
font, err := freetype.ParseFont(fontBytes) // 解析字体文件
if err != nil {
return nil, err
}
return font, nil
}
func GetSuccessContent(name string, tc int32) []Content {
return []Content{
{
Text: name,
X: 480,
Y: 735,
},
{
Text: "祝贺你完成拼图",
X: 415,
Y: 780,
},
{
Text: fmt.Sprintf("共计耗时%d秒", tc),
X: 420,
Y: 825,
},
{
Text: "公众号:扯编程的淡",
FontSize: 24,
X: 690,
Y: 855,
},
}
}