You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
1.8 KiB

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