From dd94a3df5de6cbb4e3351c4731221d3142b60500 Mon Sep 17 00:00:00 2001 From: Jack Date: Wed, 23 Sep 2015 20:00:36 -0700 Subject: add imaging --- .../github.com/disintegration/imaging/README.md | 160 +++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 Godeps/_workspace/src/github.com/disintegration/imaging/README.md (limited to 'Godeps/_workspace/src/github.com/disintegration/imaging/README.md') diff --git a/Godeps/_workspace/src/github.com/disintegration/imaging/README.md b/Godeps/_workspace/src/github.com/disintegration/imaging/README.md new file mode 100644 index 000000000..16ac8cf6c --- /dev/null +++ b/Godeps/_workspace/src/github.com/disintegration/imaging/README.md @@ -0,0 +1,160 @@ +# Imaging + +Package imaging provides basic image manipulation functions (resize, rotate, flip, crop, etc.). +This package is based on the standard Go image package and works best along with it. + +Image manipulation functions provided by the package take any image type +that implements `image.Image` interface as an input, and return a new image of +`*image.NRGBA` type (32bit RGBA colors, not premultiplied by alpha). + +## Installation + +Imaging requires Go version 1.2 or greater. + + go get -u github.com/disintegration/imaging + +## Documentation + +http://godoc.org/github.com/disintegration/imaging + +## Usage examples + +A few usage examples can be found below. See the documentation for the full list of supported functions. + +### Image resizing +```go +// resize srcImage to size = 128x128px using the Lanczos filter +dstImage128 := imaging.Resize(srcImage, 128, 128, imaging.Lanczos) + +// resize srcImage to width = 800px preserving the aspect ratio +dstImage800 := imaging.Resize(srcImage, 800, 0, imaging.Lanczos) + +// scale down srcImage to fit the 800x600px bounding box +dstImageFit := imaging.Fit(srcImage, 800, 600, imaging.Lanczos) + +// resize and crop the srcImage to make a 100x100px thumbnail +dstImageThumb := imaging.Thumbnail(srcImage, 100, 100, imaging.Lanczos) +``` + +Imaging supports image resizing using various resampling filters. The most notable ones: +- `NearestNeighbor` - Fastest resampling filter, no antialiasing. +- `Box` - Simple and fast averaging filter appropriate for downscaling. When upscaling it's similar to NearestNeighbor. +- `Linear` - Bilinear filter, smooth and reasonably fast. +- `MitchellNetravali` - А smooth bicubic filter. +- `CatmullRom` - A sharp bicubic filter. +- `Gaussian` - Blurring filter that uses gaussian function, useful for noise removal. +- `Lanczos` - High-quality resampling filter for photographic images yielding sharp results, but it's slower than cubic filters. + +The full list of supported filters: NearestNeighbor, Box, Linear, Hermite, MitchellNetravali, CatmullRom, BSpline, Gaussian, Lanczos, Hann, Hamming, Blackman, Bartlett, Welch, Cosine. Custom filters can be created using ResampleFilter struct. + +**Resampling filters comparison** + +Original image. Will be resized from 512x512px to 128x128px. + +![srcImage](http://disintegration.github.io/imaging/in_lena_bw_512.png) + +Filter | Resize result +---|--- +`imaging.NearestNeighbor` | ![dstImage](http://disintegration.github.io/imaging/out_resize_down_nearest.png) +`imaging.Box` | ![dstImage](http://disintegration.github.io/imaging/out_resize_down_box.png) +`imaging.Linear` | ![dstImage](http://disintegration.github.io/imaging/out_resize_down_linear.png) +`imaging.MitchellNetravali` | ![dstImage](http://disintegration.github.io/imaging/out_resize_down_mitchell.png) +`imaging.CatmullRom` | ![dstImage](http://disintegration.github.io/imaging/out_resize_down_catrom.png) +`imaging.Gaussian` | ![dstImage](http://disintegration.github.io/imaging/out_resize_down_gaussian.png) +`imaging.Lanczos` | ![dstImage](http://disintegration.github.io/imaging/out_resize_down_lanczos.png) + +### Gaussian Blur +```go +dstImage := imaging.Blur(srcImage, 0.5) +``` + +Sigma parameter allows to control the strength of the blurring effect. + +Original image | Sigma = 0.5 | Sigma = 1.5 +---|---|--- +![srcImage](http://disintegration.github.io/imaging/in_lena_bw_128.png) | ![dstImage](http://disintegration.github.io/imaging/out_blur_0.5.png) | ![dstImage](http://disintegration.github.io/imaging/out_blur_1.5.png) + +### Sharpening +```go +dstImage := imaging.Sharpen(srcImage, 0.5) +``` + +Uses gaussian function internally. Sigma parameter allows to control the strength of the sharpening effect. + +Original image | Sigma = 0.5 | Sigma = 1.5 +---|---|--- +![srcImage](http://disintegration.github.io/imaging/in_lena_bw_128.png) | ![dstImage](http://disintegration.github.io/imaging/out_sharpen_0.5.png) | ![dstImage](http://disintegration.github.io/imaging/out_sharpen_1.5.png) + +### Gamma correction +```go +dstImage := imaging.AdjustGamma(srcImage, 0.75) +``` + +Original image | Gamma = 0.75 | Gamma = 1.25 +---|---|--- +![srcImage](http://disintegration.github.io/imaging/in_lena_bw_128.png) | ![dstImage](http://disintegration.github.io/imaging/out_gamma_0.75.png) | ![dstImage](http://disintegration.github.io/imaging/out_gamma_1.25.png) + +### Contrast adjustment +```go +dstImage := imaging.AdjustContrast(srcImage, 20) +``` + +Original image | Contrast = 20 | Contrast = -20 +---|---|--- +![srcImage](http://disintegration.github.io/imaging/in_lena_bw_128.png) | ![dstImage](http://disintegration.github.io/imaging/out_contrast_p20.png) | ![dstImage](http://disintegration.github.io/imaging/out_contrast_m20.png) + +### Brightness adjustment +```go +dstImage := imaging.AdjustBrightness(srcImage, 20) +``` + +Original image | Brightness = 20 | Brightness = -20 +---|---|--- +![srcImage](http://disintegration.github.io/imaging/in_lena_bw_128.png) | ![dstImage](http://disintegration.github.io/imaging/out_brightness_p20.png) | ![dstImage](http://disintegration.github.io/imaging/out_brightness_m20.png) + + +### Complete code example +Here is the code example that loads several images, makes thumbnails of them +and combines them together side-by-side. + +```go +package main + +import ( + "image" + "image/color" + + "github.com/disintegration/imaging" +) + +func main() { + + // input files + files := []string{"01.jpg", "02.jpg", "03.jpg"} + + // load images and make 100x100 thumbnails of them + var thumbnails []image.Image + for _, file := range files { + img, err := imaging.Open(file) + if err != nil { + panic(err) + } + thumb := imaging.Thumbnail(img, 100, 100, imaging.CatmullRom) + thumbnails = append(thumbnails, thumb) + } + + // create a new blank image + dst := imaging.New(100*len(thumbnails), 100, color.NRGBA{0, 0, 0, 0}) + + // paste thumbnails into the new image side by side + for i, thumb := range thumbnails { + dst = imaging.Paste(dst, thumb, image.Pt(i*100, 0)) + } + + // save the combined image to file + err := imaging.Save(dst, "dst.jpg") + if err != nil { + panic(err) + } +} +``` -- cgit v1.2.3-1-g7c22