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