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/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}