aboutsummaryrefslogtreecommitdiff
path: root/weed
diff options
context:
space:
mode:
Diffstat (limited to 'weed')
-rw-r--r--weed/images/preprocess.go4
-rw-r--r--weed/images/resizing.go19
-rw-r--r--weed/server/volume_server_handlers_read.go2
3 files changed, 16 insertions, 9 deletions
diff --git a/weed/images/preprocess.go b/weed/images/preprocess.go
index 968cda44f..4563df7f4 100644
--- a/weed/images/preprocess.go
+++ b/weed/images/preprocess.go
@@ -18,10 +18,10 @@ func MaybePreprocessImage(filename string, data []byte, width, height int) (resi
ext = strings.ToLower(ext)
switch ext {
case ".png", ".gif", ".webp":
- return Resized(ext, data, width, height)
+ return Resized(ext, data, width, height, "")
case ".jpg", ".jpeg":
data = FixJpgOrientation(data)
- return Resized(ext, data, width, height)
+ return Resized(ext, data, width, height, "")
}
return data, 0, 0
}
diff --git a/weed/images/resizing.go b/weed/images/resizing.go
index e644570cb..5af8e45c9 100644
--- a/weed/images/resizing.go
+++ b/weed/images/resizing.go
@@ -12,7 +12,7 @@ import (
"github.com/disintegration/imaging"
)
-func Resized(ext string, data []byte, width, height int) (resized []byte, w int, h int) {
+func Resized(ext string, data []byte, width, height int, mode string) (resized []byte, w int, h int) {
if width == 0 && height == 0 {
return data, 0, 0
}
@@ -21,11 +21,18 @@ func Resized(ext string, data []byte, width, height int) (resized []byte, w int,
bounds := srcImage.Bounds()
var dstImage *image.NRGBA
if bounds.Dx() > width && width != 0 || bounds.Dy() > height && height != 0 {
- if width == height && bounds.Dx() != bounds.Dy() {
- dstImage = imaging.Thumbnail(srcImage, width, height, imaging.Lanczos)
- w, h = width, height
- } else {
- dstImage = imaging.Resize(srcImage, width, height, imaging.Lanczos)
+ switch mode {
+ case "fit":
+ dstImage = imaging.Fit(srcImage, width, height, imaging.Lanczos)
+ case "fill":
+ dstImage = imaging.Fill(srcImage, width, height, imaging.Center, imaging.Lanczos)
+ default:
+ if width == height && bounds.Dx() != bounds.Dy() {
+ dstImage = imaging.Thumbnail(srcImage, width, height, imaging.Lanczos)
+ w, h = width, height
+ } else {
+ dstImage = imaging.Resize(srcImage, width, height, imaging.Lanczos)
+ }
}
} else {
return data, bounds.Dx(), bounds.Dy()
diff --git a/weed/server/volume_server_handlers_read.go b/weed/server/volume_server_handlers_read.go
index 3d15d790e..d457c77b9 100644
--- a/weed/server/volume_server_handlers_read.go
+++ b/weed/server/volume_server_handlers_read.go
@@ -144,7 +144,7 @@ func (vs *VolumeServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request)
if r.FormValue("height") != "" {
height, _ = strconv.Atoi(r.FormValue("height"))
}
- n.Data, _, _ = images.Resized(ext, n.Data, width, height)
+ n.Data, _, _ = images.Resized(ext, n.Data, width, height, r.FormValue("mode"))
}
if e := writeResponseContent(filename, mtype, bytes.NewReader(n.Data), w, r); e != nil {