-
Notifications
You must be signed in to change notification settings - Fork 0
/
image.go
70 lines (53 loc) · 1.4 KB
/
image.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
package document
import (
"bytes"
"errors"
"image/jpeg"
"image/png"
"io/ioutil"
"net/http"
"github.com/jung-kurt/gofpdf"
)
type Image struct {
ImageUrl *string `json:"imageUrl" validate:"required"`
}
func (doc *Doc) AddImage(dto *Image) (*gofpdf.ImageInfoType, error) {
rawImg, err := getImageFromUrl(dto.ImageUrl)
if err != nil {
return nil, err
}
//TEST IF PNG OR JPG
if _, err = png.Decode(bytes.NewReader(*rawImg)); err == nil {
return doc.Fpdf.RegisterImageOptionsReader(*dto.ImageUrl,
gofpdf.ImageOptions{ImageType: "PNG", ReadDpi: true},
bytes.NewReader(*rawImg)), nil
}
if _, err = jpeg.Decode(bytes.NewReader(*rawImg)); err == nil {
return doc.Fpdf.RegisterImageOptionsReader(*dto.ImageUrl,
gofpdf.ImageOptions{ImageType: "JPG", ReadDpi: true},
bytes.NewReader(*rawImg)), nil
}
return nil, errors.New("cannot load image - wrong format?")
}
func getImageFromUrl(url *string) (*[]byte, error) {
// Create a new request using http
req, err := http.NewRequest("GET", *url, nil)
if err != nil {
return nil, err
}
// Send req using http Client
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
if resp.StatusCode != http.StatusOK {
return nil, errors.New("wront status @ get request: " + resp.Status)
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return &data, nil
}