mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 17:42:25 -06:00 
			
		
		
		
	* start fixing up tests * fix up tests + automate with drone * fiddle with linting * messing about with drone.yml * some more fiddling * hmmm * add cache * add vendor directory * verbose * ci updates * update some little things * update sig
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			55 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)
 | 
						|
}
 |