diff options
author | 2022-08-10 14:05:14 +0200 | |
---|---|---|
committer | 2022-08-10 14:05:14 +0200 | |
commit | 91c8d5d20d9abee8113614ef49b1a626c76c16b4 (patch) | |
tree | 745d1b3df4b32b50bc098770d44e5f4f9f72311b /vendor/github.com/disintegration/imaging/histogram.go | |
parent | [bugfix] Fix placeholder typo in user panel (#745) (diff) | |
download | gotosocial-91c8d5d20d9abee8113614ef49b1a626c76c16b4.tar.xz |
[bugfix] Fix thumbnails not taking exif rotation into account (#746)
* use disintegration/imaging instead of nfnt/resize
* update tests
* use disintegration lib for thumbing (if necessary)
Diffstat (limited to 'vendor/github.com/disintegration/imaging/histogram.go')
-rw-r--r-- | vendor/github.com/disintegration/imaging/histogram.go | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/vendor/github.com/disintegration/imaging/histogram.go b/vendor/github.com/disintegration/imaging/histogram.go new file mode 100644 index 000000000..c547fe822 --- /dev/null +++ b/vendor/github.com/disintegration/imaging/histogram.go @@ -0,0 +1,52 @@ +package imaging + +import ( + "image" + "sync" +) + +// Histogram returns a normalized histogram of an image. +// +// Resulting histogram is represented as an array of 256 floats, where +// histogram[i] is a probability of a pixel being of a particular luminance i. +func Histogram(img image.Image) [256]float64 { + var mu sync.Mutex + var histogram [256]float64 + var total float64 + + src := newScanner(img) + if src.w == 0 || src.h == 0 { + return histogram + } + + parallel(0, src.h, func(ys <-chan int) { + var tmpHistogram [256]float64 + var tmpTotal float64 + scanLine := make([]uint8, src.w*4) + for y := range ys { + src.scan(0, y, src.w, y+1, scanLine) + i := 0 + for x := 0; x < src.w; x++ { + s := scanLine[i : i+3 : i+3] + r := s[0] + g := s[1] + b := s[2] + y := 0.299*float32(r) + 0.587*float32(g) + 0.114*float32(b) + tmpHistogram[int(y+0.5)]++ + tmpTotal++ + i += 4 + } + } + mu.Lock() + for i := 0; i < 256; i++ { + histogram[i] += tmpHistogram[i] + } + total += tmpTotal + mu.Unlock() + }) + + for i := 0; i < 256; i++ { + histogram[i] = histogram[i] / total + } + return histogram +} |