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, imageExtension string) (image.Image, error) {
15	reader := bytes.NewReader(data)
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, imageExtension string) ([]byte, error) {
35	buf := new(bytes.Buffer)
36	var err error
37	switch imageExtension {
38	case "png":
39		err = png.Encode(buf, img)
40	case "jpg":
41		err = jpeg.Encode(buf, img, nil)
42	case "jpeg":
43		err = jpeg.Encode(buf, img, nil)
44	default:
45		img = nil
46	}
47	if err != nil {
48		return buf.Bytes(), err
49	}
50	return buf.Bytes(), err
51}
52
53func imageToPNG(img image.Image) ([]byte, error) {
54	buf := new(bytes.Buffer)
55	var err error
56	err = png.Encode(buf, img)
57	return buf.Bytes(), err
58}
59
60func imageToHistogram(img image.Image) [][]float64 {
61	bounds := img.Bounds()
62
63	//generate the histogram
64	var histogram [][]float64
65	for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
66		for x := bounds.Min.X; x < bounds.Max.X; x++ {
67			r, g, b, a := img.At(x, y).RGBA()
68			var pixel []float64
69			pixel = append(pixel, float64(r), float64(g), float64(b), float64(a))
70			histogram = append(histogram, pixel)
71		}
72	}
73	return histogram
74}
75
76func Resize(img image.Image) image.Image {
77	r := resize.Resize(uint(config.ImgWidth), uint(config.ImgHeigh), img, resize.Lanczos3)
78	return r
79}