56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| /*
 | |
| 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)
 | |
| }
 |