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}