Files
mattermost/app/image.go
Claudio Costa 73c41ef808 [MM-28638] Improve image thumbnail generation logic (#15534)
* Improve image thumbnail generation logic

* Improve naming
2020-10-09 08:47:20 +02:00

51 lines
1.3 KiB
Go

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
package app
import (
"image"
"github.com/disintegration/imaging"
)
func genThumbnail(img image.Image) image.Image {
thumb := img
w := img.Bounds().Dx()
h := img.Bounds().Dy()
if h > ImageThumbnailHeight || w > ImageThumbnailWidth {
ratio := float64(h) / float64(w)
if ratio < ImageThumbnailRatio {
// we pre-calculate the thumbnail's width to make sure we are not upscaling.
targetWidth := int(float64(ImageThumbnailHeight) * float64(w) / float64(h))
if targetWidth <= w {
thumb = imaging.Resize(img, 0, ImageThumbnailHeight, imaging.Lanczos)
} else {
thumb = imaging.Resize(img, ImageThumbnailWidth, 0, imaging.Lanczos)
}
} else {
// we pre-calculate the thumbnail's height to make sure we are not upscaling.
targetHeight := int(float64(ImageThumbnailWidth) * float64(h) / float64(w))
if targetHeight <= h {
thumb = imaging.Resize(img, ImageThumbnailWidth, 0, imaging.Lanczos)
} else {
thumb = imaging.Resize(img, 0, ImageThumbnailHeight, imaging.Lanczos)
}
}
}
return thumb
}
func genPreview(img image.Image) image.Image {
preview := img
w := img.Bounds().Dx()
if w > ImagePreviewWidth {
preview = imaging.Resize(img, ImagePreviewWidth, 0, imaging.Lanczos)
}
return preview
}