diff --git a/go/images/preprocess.go b/go/images/preprocess.go index b5907b1b8..6b183df9f 100644 --- a/go/images/preprocess.go +++ b/go/images/preprocess.go @@ -12,7 +12,7 @@ import ( * Call this function on any file uploaded to weedfs * */ -func MaybePreprocessImage(filename string, data []byte, width, height int) (resized []byte) { +func MaybePreprocessImage(filename string, data []byte, width, height int) (resized []byte, w int, h int) { ext := filepath.Ext(filename) switch ext { case ".png", ".gif": @@ -21,5 +21,5 @@ func MaybePreprocessImage(filename string, data []byte, width, height int) (resi data = FixJpgOrientation(data) return Resized(ext, data, width, height) } - return data + return data, 0, 0 } diff --git a/go/images/resizing.go b/go/images/resizing.go index 6e774e1db..7e21db70b 100644 --- a/go/images/resizing.go +++ b/go/images/resizing.go @@ -9,17 +9,22 @@ import ( "image/png" ) -func Resized(ext string, data []byte, width, height int) (resized []byte) { +func Resized(ext string, data []byte, width, height int) (resized []byte, w int, h int) { if width == 0 && height == 0 { - return data + return data, 0, 0 } if srcImage, _, err := image.Decode(bytes.NewReader(data)); err == nil { bounds := srcImage.Bounds() var dstImage *image.NRGBA - if width == height && bounds.Dx() != bounds.Dy() { - dstImage = imaging.Thumbnail(srcImage, width, height, imaging.Lanczos) - } else { - dstImage = imaging.Resize(srcImage, width, height, imaging.Lanczos) + 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) + } + }else{ + return data, bounds.Dx(), bounds.Dy() } var buf bytes.Buffer switch ext { @@ -30,7 +35,7 @@ func Resized(ext string, data []byte, width, height int) (resized []byte) { case ".gif": gif.Encode(&buf, dstImage, nil) } - return buf.Bytes() + return buf.Bytes(), dstImage.Bounds().Dx(), dstImage.Bounds().Dy() } - return data + return data, 0, 0 } diff --git a/go/weed/weed_server/volume_server_handlers.go b/go/weed/weed_server/volume_server_handlers.go index ee57109ea..303d63207 100644 --- a/go/weed/weed_server/volume_server_handlers.go +++ b/go/weed/weed_server/volume_server_handlers.go @@ -132,7 +132,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) } w.Header().Set("Accept-Ranges", "bytes")