mirror of https://github.com/gogits/gogs.git
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.
55 lines
1.8 KiB
55 lines
1.8 KiB
/* |
|
Copyright (c) 2012, Jan Schlicht <jan.schlicht@gmail.com> |
|
|
|
Permission to use, copy, modify, and/or distribute this software for any purpose |
|
with or without fee is hereby granted, provided that the above copyright notice |
|
and this permission notice appear in all copies. |
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH |
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND |
|
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, |
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS |
|
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
|
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF |
|
THIS SOFTWARE. |
|
*/ |
|
|
|
package resize |
|
|
|
import ( |
|
"image" |
|
) |
|
|
|
// Thumbnail will downscale provided image to max width and height preserving |
|
// original aspect ratio and using the interpolation function interp. |
|
// It will return original image, without processing it, if original sizes |
|
// are already smaller than provided constraints. |
|
func Thumbnail(maxWidth, maxHeight uint, img image.Image, interp InterpolationFunction) image.Image { |
|
origBounds := img.Bounds() |
|
origWidth := uint(origBounds.Dx()) |
|
origHeight := uint(origBounds.Dy()) |
|
newWidth, newHeight := origWidth, origHeight |
|
|
|
// Return original image if it have same or smaller size as constraints |
|
if maxWidth >= origWidth && maxHeight >= origHeight { |
|
return img |
|
} |
|
|
|
// Preserve aspect ratio |
|
if origWidth > maxWidth { |
|
newHeight = uint(origHeight * maxWidth / origWidth) |
|
if newHeight < 1 { |
|
newHeight = 1 |
|
} |
|
newWidth = maxWidth |
|
} |
|
|
|
if newHeight > maxHeight { |
|
newWidth = uint(newWidth * maxHeight / newHeight) |
|
if newWidth < 1 { |
|
newWidth = 1 |
|
} |
|
newHeight = maxHeight |
|
} |
|
return Resize(newWidth, newHeight, img, interp) |
|
}
|
|
|