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