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.
		
		
		
		
		
			
		
			
				
					
					
						
							56 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							56 lines
						
					
					
						
							1.4 KiB
						
					
					
				| package images | |
| 
 | |
| import ( | |
| 	"bytes" | |
| 	"image" | |
| 	"image/gif" | |
| 	"image/jpeg" | |
| 	"image/png" | |
| 	"io" | |
| 
 | |
| 	"github.com/disintegration/imaging" | |
| 
 | |
| 	"github.com/chrislusf/seaweedfs/weed/glog" | |
| ) | |
| 
 | |
| func Resized(ext string, read io.ReadSeeker, width, height int, mode string) (resized io.ReadSeeker, w int, h int) { | |
| 	if width == 0 && height == 0 { | |
| 		return read, 0, 0 | |
| 	} | |
| 	srcImage, _, err := image.Decode(read) | |
| 	if err == nil { | |
| 		bounds := srcImage.Bounds() | |
| 		var dstImage *image.NRGBA | |
| 		if bounds.Dx() > width && width != 0 || bounds.Dy() > height && height != 0 { | |
| 			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 { | |
| 			read.Seek(0, 0) | |
| 			return read, bounds.Dx(), bounds.Dy() | |
| 		} | |
| 		var buf bytes.Buffer | |
| 		switch ext { | |
| 		case ".png": | |
| 			png.Encode(&buf, dstImage) | |
| 		case ".jpg", ".jpeg": | |
| 			jpeg.Encode(&buf, dstImage, nil) | |
| 		case ".gif": | |
| 			gif.Encode(&buf, dstImage, nil) | |
| 		} | |
| 		return bytes.NewReader(buf.Bytes()), dstImage.Bounds().Dx(), dstImage.Bounds().Dy() | |
| 	} else { | |
| 		glog.Error(err) | |
| 	} | |
| 	return read, 0, 0 | |
| }
 |