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, non-premultiplied alpha).
go get -u github.com/disintegration/imaging
https://pkg.go.dev/github.com/disintegration/imaging
A few usage examples can be found below. See the documentation for the full list of supported functions.
// 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:
Lanczos
- A high-quality resampling filter for photographic images yielding sharp results.CatmullRom
- A sharp cubic filter that is faster than Lanczos filter while providing similar results.MitchellNetravali
- A cubic filter that produces smoother results with less ringing artifacts than CatmullRom.Linear
- Bilinear resampling filter, produces smooth output. Faster than cubic filters.Box
- Simple and fast averaging filter appropriate for downscaling. When upscaling it's similar to NearestNeighbor.NearestNeighbor
- Fastest resampling filter, no antialiasing.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 result |
---|---|
imaging.NearestNeighbor | |
imaging.Linear | |
imaging.CatmullRom | |
imaging.Lanczos |
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 |
---|---|---|
dstImage := imaging.Sharpen(srcImage, 0.5)
Sharpen
uses gaussian function internally. Sigma parameter allows to control the strength of the sharpening effect.
Original image | Sigma = 0.5 | Sigma = 1.5 |
---|---|---|
dstImage := imaging.AdjustGamma(srcImage, 0.75)
Original image | Gamma = 0.75 | Gamma = 1.25 |
---|---|---|
dstImage := imaging.AdjustContrast(srcImage, 20)
Original image | Contrast = 15 | Contrast = -15 |
---|---|---|