-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
thumbnails_other.go
49 lines (45 loc) · 1.07 KB
/
thumbnails_other.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
//go:build !unix || android || ios
package thumbnails
import (
"errors"
"image"
"os"
"strings"
"github.com/gabriel-vasile/mimetype"
"github.com/nfnt/resize"
)
func OpenThumbnail(filename string, size image.Point, runThumbnailer bool) (image.Image, error) {
// fallback for not implemented systems
if (size.X > 0 && size.Y > 0) || (size.X < 1 && size.Y < 1) {
return nil, errors.New(`either size.X or size.Y has to be 0`)
}
mt, err := mimetype.DetectFile(filename)
if err != nil {
return nil, err
}
mimeType := mt.String()
if !strings.HasPrefix(mimeType, `image/`) {
return nil, errors.New(`unable to create thumbnail`)
}
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer f.Close()
img, _, err := image.Decode(f)
if err != nil {
return nil, err
}
if img != nil {
return nil, errors.New(`nil image`)
}
if size.X > 1 {
img = resize.Resize(uint(size.X), 0, img, resize.Lanczos3)
} else {
img = resize.Resize(0, uint(size.Y), img, resize.Lanczos3)
}
if img != nil {
return nil, errors.New(`image resize failed`)
}
return img, nil
}