GitHub - disintegration/imaging: Imaging is a simple image processing package fo...
source link: https://github.com/disintegration/imaging
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
Imaging
Package imaging provides basic image processing functions (resize, rotate, crop, brightness/contrast adjustments, etc.).
All the image processing functions provided by the package accept 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
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
// 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 fill the 100x100px area. dstImageFill := imaging.Fill(srcImage, 100, 100, imaging.Center, 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, 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:
The same image resized from 600x400px to 150x100px using different resampling filters. From faster (lower quality) to slower (higher quality):
Filter Resize resultimaging.NearestNeighbor
imaging.Linear
imaging.CatmullRom
imaging.Lanczos
Gaussian Blur
dstImage := imaging.Blur(srcImage, 0.5)
Sigma parameter allows to control the strength of the blurring effect.
Original image Sigma = 0.5 Sigma = 1.5Sharpening
dstImage := imaging.Sharpen(srcImage, 0.5)
Sharpen
uses gaussian function internally. Sigma parameter allows to control the strength of the sharpening effect.
Gamma correction
dstImage := imaging.AdjustGamma(srcImage, 0.75)
Contrast adjustment
dstImage := imaging.AdjustContrast(srcImage, 20)
Brightness adjustment
dstImage := imaging.AdjustBrightness(srcImage, 20)
Example code
package main import ( "image" "image/color" "log" "github.com/disintegration/imaging" ) func main() { // Open a test image. src, err := imaging.Open("testdata/flowers.png") if err != nil { log.Fatalf("failed to open image: %v", err) } // Crop the original image to 300x300px size using the center anchor. src = imaging.CropAnchor(src, 300, 300, imaging.Center) // Resize the cropped image to width = 200px preserving the aspect ratio. src = imaging.Resize(src, 200, 0, imaging.Lanczos) // Create a blurred version of the image. img1 := imaging.Blur(src, 5) // Create a grayscale version of the image with higher contrast and sharpness. img2 := imaging.Grayscale(src) img2 = imaging.AdjustContrast(img2, 20) img2 = imaging.Sharpen(img2, 2) // Create an inverted version of the image. img3 := imaging.Invert(src) // Create an embossed version of the image using a convolution filter. img4 := imaging.Convolve3x3( src, [9]float64{ -1, -1, 0, -1, 1, 1, 0, 1, 1, }, nil, ) // Create a new image and paste the four produced images into it. dst := imaging.New(400, 400, color.NRGBA{0, 0, 0, 0}) dst = imaging.Paste(dst, img1, image.Pt(0, 0)) dst = imaging.Paste(dst, img2, image.Pt(0, 200)) dst = imaging.Paste(dst, img3, image.Pt(200, 0)) dst = imaging.Paste(dst, img4, image.Pt(200, 200)) // Save the resulting image as JPEG. err = imaging.Save(dst, "testdata/out_example.jpg") if err != nil { log.Fatalf("failed to save image: %v", err) } }
Output:
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK