arnaucube
arnaucube/galdricPublic Self-hosted repository
galdric/imageOperations.go
imageOperations.goRaw
 1package main
 2
 3import (
 4	"bytes"
 5	"image"
 6	"image/jpeg"
 7	"image/png"
 8
 9	"github.com/nfnt/resize"
10)
11
12type imgRGBA [][]float64
13
14func dataToImage(data []byte, imageName string) (image.Image, error) {
15	//var histogram imgRGBA
16	reader := bytes.NewReader(data)
17	//var imageExtension = strings.Split(imageName, ".")[1]
18	var img image.Image
19	var err error
20	/*switch imageExtension {
21	case "png":
22		img, err = png.Decode(reader)
23	case "jpg":
24		img, err = jpeg.Decode(reader)
25	case "jpeg":
26		img, err = jpeg.Decode(reader)
27	default:
28		img = nil
29	}
30	*/
31	img, err = jpeg.Decode(reader)
32	if err != nil {
33		return img, err
34	}
35	return img, err
36}
37
38func imageToData(img image.Image, imageName string) ([]byte, error) {
39	buf := new(bytes.Buffer)
40	//var imageExtension = strings.Split(imageName, ".")[1]
41	var err error
42	/*switch imageExtension {
43	case "png":
44		err = png.Encode(buf, img)
45	case "jpg":
46		err = jpeg.Encode(buf, img, nil)
47	case "jpeg":
48		err = jpeg.Encode(buf, img, nil)
49	default:
50		img = nil
51	}*/
52	err = jpeg.Encode(buf, img, nil)
53	if err != nil {
54		return buf.Bytes(), err
55	}
56	return buf.Bytes(), err
57}
58
59func imageToPNG(img image.Image) ([]byte, error) {
60	buf := new(bytes.Buffer)
61	var err error
62	err = png.Encode(buf, img)
63	return buf.Bytes(), err
64}
65
66func imageToHistogram(img image.Image) [][]float64 {
67	bounds := img.Bounds()
68
69	//generate the histogram
70	var histogram [][]float64
71	for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
72		for x := bounds.Min.X; x < bounds.Max.X; x++ {
73			r, g, b, a := img.At(x, y).RGBA()
74			var pixel []float64
75			pixel = append(pixel, float64(r), float64(g), float64(b), float64(a))
76			histogram = append(histogram, pixel)
77		}
78	}
79	return histogram
80}
81
82func Resize(img image.Image) image.Image {
83	r := resize.Resize(uint(config.ImgWidth), uint(config.ImgHeigh), img, resize.Lanczos3)
84	return r
85}