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}