arnaucube
arnaucube/goImgServerPublic Self-hosted repository
goImgServer/imageOperations.go
imageOperations.goRaw
 1package main
 2
 3import (
 4	"bytes"
 5	"image"
 6	"image/jpeg"
 7	"image/png"
 8	"strings"
 9
10	"github.com/nfnt/resize"
11)
12
13func dataToImage(data []byte, imageName string) (image.Image, error) {
14	reader := bytes.NewReader(data)
15	var imageExtension = strings.Split(imageName, ".")[1]
16	var img image.Image
17	var err error
18	switch imageExtension {
19	case "png":
20		img, err = png.Decode(reader)
21	case "jpg":
22		img, err = jpeg.Decode(reader)
23	case "jpeg":
24		img, err = jpeg.Decode(reader)
25	default:
26		img = nil
27	}
28	if err != nil {
29		return img, err
30	}
31	return img, err
32}
33
34func imageToData(img image.Image, imageName string) ([]byte, error) {
35	buf := new(bytes.Buffer)
36	var imageExtension = strings.Split(imageName, ".")[1]
37	var err error
38	switch imageExtension {
39	case "png":
40		err = png.Encode(buf, img)
41	case "jpg":
42		err = jpeg.Encode(buf, img, nil)
43	case "jpeg":
44		err = jpeg.Encode(buf, img, nil)
45	default:
46		img = nil
47	}
48	if err != nil {
49		return buf.Bytes(), err
50	}
51	return buf.Bytes(), err
52}
53
54func Resize(img image.Image) image.Image {
55	r := resize.Resize(160, 0, img, resize.Lanczos3)
56	return r
57}