Golang : Resize Image
Somehow...just feel like writing a tutorial on how to resize image with Golang today while writing out references for Golang's image package today.
Today's web application will most likely to include profile photo of the users and this usually involve cropping and resizing images uploaded by the users.
In this tutorial, I will use the resize photo functions from this excellent https://github.com/disintegration/imaging package - a fairly simple and compatible with standard Go's image packages.
With much further ado, here's the codes :
package main
import (
"github.com/disintegration/imaging"
"os"
"runtime"
"fmt"
)
func main() {
// maximize CPU usage for maximum performance
runtime.GOMAXPROCS(runtime.NumCPU())
// load original image
img, err := imaging.Open("./big.jpg")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// resize image from 1000 to 500 while preserving the aspect ration
// Supported resize filters: NearestNeighbor, Box, Linear, Hermite, MitchellNetravali,
// CatmullRom, BSpline, Gaussian, Lanczos, Hann, Hamming, Blackman, Bartlett, Welch, Cosine.
dstimg := imaging.Resize(img, 500, 0, imaging.Box)
// save resized image
err = imaging.Save(dstimg, "./resized.jpg")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// everything ok
fmt.Println("Image resized")
}
Here are some of the resized image samples :
Big.jpg(original)
Gaussian
Lanczos
Box
Notes :
In case you have trouble getting the imaging package. See this how to set GOPATH and fix the cannot error tutorial.
References :
See also : Golang : Crop image
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+8.6k Golang : Add text to image and get OpenCV's X, Y co-ordinates example
+21.8k Golang : How to reverse slice or array elements order
+10.6k Golang : Get local time and equivalent time in different time zone
+12.8k Swift : Convert (cast) Int or int32 value to CGFloat
+6.5k Golang : Map within a map example
+7.1k Nginx : How to block user agent ?
+6.7k Golang : Skip or discard items of non-interest when iterating example
+21.8k Golang : Upload big file (larger than 100MB) to AWS S3 with multipart upload
+19.3k Golang : Get RGBA values of each image pixel
+8k Golang : What fmt.Println() can do and println() cannot do
+12.1k Golang : Perform sanity checks on filename example
+5.1k Golang : Check if a word is countable or not