package main
|
|
|
|
import (
|
|
"bytes"
|
|
"image"
|
|
"image/jpeg"
|
|
"image/png"
|
|
|
|
"github.com/nfnt/resize"
|
|
)
|
|
|
|
type imgRGBA [][]float64
|
|
|
|
func dataToImage(data []byte, imageExtension string) (image.Image, error) {
|
|
reader := bytes.NewReader(data)
|
|
var img image.Image
|
|
var err error
|
|
switch imageExtension {
|
|
case "png":
|
|
img, err = png.Decode(reader)
|
|
case "jpg":
|
|
img, err = jpeg.Decode(reader)
|
|
case "jpeg":
|
|
img, err = jpeg.Decode(reader)
|
|
default:
|
|
img = nil
|
|
}
|
|
if err != nil {
|
|
return img, err
|
|
}
|
|
return img, err
|
|
}
|
|
|
|
func imageToData(img image.Image, imageExtension string) ([]byte, error) {
|
|
buf := new(bytes.Buffer)
|
|
var err error
|
|
switch imageExtension {
|
|
case "png":
|
|
err = png.Encode(buf, img)
|
|
case "jpg":
|
|
err = jpeg.Encode(buf, img, nil)
|
|
case "jpeg":
|
|
err = jpeg.Encode(buf, img, nil)
|
|
default:
|
|
img = nil
|
|
}
|
|
if err != nil {
|
|
return buf.Bytes(), err
|
|
}
|
|
return buf.Bytes(), err
|
|
}
|
|
|
|
func imageToPNG(img image.Image) ([]byte, error) {
|
|
buf := new(bytes.Buffer)
|
|
var err error
|
|
err = png.Encode(buf, img)
|
|
return buf.Bytes(), err
|
|
}
|
|
|
|
func imageToHistogram(img image.Image) [][]float64 {
|
|
bounds := img.Bounds()
|
|
|
|
//generate the histogram
|
|
var histogram [][]float64
|
|
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
|
|
for x := bounds.Min.X; x < bounds.Max.X; x++ {
|
|
r, g, b, a := img.At(x, y).RGBA()
|
|
var pixel []float64
|
|
pixel = append(pixel, float64(r), float64(g), float64(b), float64(a))
|
|
histogram = append(histogram, pixel)
|
|
}
|
|
}
|
|
return histogram
|
|
}
|
|
|
|
func Resize(img image.Image) image.Image {
|
|
r := resize.Resize(uint(config.ImgWidth), uint(config.ImgHeigh), img, resize.Lanczos3)
|
|
return r
|
|
}
|