mergi
Tool & Go library for image manipulation (Merge, Crop, Resize, Watermark, Animate)
About mergi

| Result | Terminal Code |
|---|---|
![]() | mergi -t TT -i https://raw.githubusercontent.com/ashleymcnamara/gophers/master/Facepalm_Gopher.png -r "131 131" -i https://raw.githubusercontent.com/ashleymcnamara/gophers/master/Facepalm_Picard_Gopher.png -r "131 131" -a "sprite 50" |
:tada: Basic Overview
Image manipulation go library plus cross platform CLI tool.
⚡ Features
- 🛠 Merge
- ✂️ Crop
- 💣 Resize
- 🖃 Watermark
- 💖 Animate
- 🔥 Easing
- 🦎 Transition
🚀 Getting started
Install via go get
To install Mergi, use go get, or download the binary file from Releases page.
$ go get github.com/noelyahan/mergi
Usage:
╔╦╗╔═╗╦═╗╔═╗╦
║║║║╣ ╠╦╝║ ╦║
╩ ╩╚═╝╩╚═╚═╝╩
let's go & make imaging fun
http://mergi.io
version 1.0.0
-a string
Enter animation type=[sprite, slide] and the delay to get mergi gif animation ex: smooth 10
-c value
Enter crop points and height and width ex: x y w h
-f string
Enter true if you want to process the final output
-i value
Enter images that want to merge ex: /path/img1 or url
-o string
Enter image outputs file ex: out.png or out.jpg (default "out.png")
-r value
Enter resize width and height of the output ex: 100 200
-t string
Enter a merge template string ex: TBTBTB (default "T")
-w value
Enter watermark image and points to place it, [-r w h] is optional ex: /path/img -r w h x y
🛠 Merge
| Image 1 | Image 2 | Result Image |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
Mergi Tool
Horizontal
mergi \
-t TT \
-i testdata/mergi_bg_1.png \
-i testdata/mergi_bg_2.png
Vertical
mergi \
-t TB \
-i testdata/mergi_bg_1.png \
-i testdata/mergi_bg_2.png
Mergi Library
image1, _ := mergi.Import(impexp.NewFileImporter("./testdata/mergi_bg_1.png"))
image2, _ := mergi.Import(impexp.NewFileImporter("./testdata/mergi_bg_2.png"))
horizontalImage, _ := mergi.Merge("TT", []image.Image{image1, image2})
mergi.Export(impexp.NewFileExporter(horizontalImage, "horizontal.png"))
verticalImage, _ := mergi.Merge("TB", []image.Image{image1, image2})
mergi.Export(impexp.NewFileExporter(verticalImage, "vertical.png"))
✂️ Crop
| Image | Result Image |
|---|---|
![]() | ![]() |
Mergi Tool
mergi \
-i testdata/mergi_bg_1.png \
-c "10 40 200 110"
Mergi Library
img, _ := mergi.Import(impexp.NewFileImporter("./testdata/mergi_bg_1.png"))
res, _ := mergi.Crop(img, image.Pt(10, 40), image.Pt(200, 110))
mergi.Export(impexp.NewFileExporter(res, "crop.png"))
💣 Resize
| Image | Result Image |
|---|---|
![]() | ![]() |
Mergi Tool
mergi \
-i testdata/mergi_bg_1.png \
-r "180 80"
Mergi Library
img, _ := mergi.Import(impexp.NewFileImporter("./testdata/mergi_bg_1.png"))
res, _ := mergi.Resize(img, uint(180), uint(80))
mergi.Export(impexp.NewFileExporter(res, "resize.png"))
🖃 Watermark
| Image | Watermark Image | Result Image |
|---|---|---|
![]() | ![]() | ![]() |
Mergi Tool
mergi \
-i testdata/mergi_bg_1.png \
-w "testdata/mergi_logo_watermark_90x40.png 250 10"
Mergi Library
originalImage, _ := mergi.Import(impexp.NewFileImporter("./testdata/mergi_bg_1.png"))
watermarkImage, _ := mergi.Import(impexp.NewFileImporter("./testdata/glass-mergi_logo_watermark_90x40.jpg"))
res, _ := mergi.Watermark(watermarkImage, originalImage, image.Pt(250, 10))
mergi.Export(impexp.NewFileExporter(res, "watermark.png"))
💖 Animate
| Image 1 | Image 2 | Result Animation |
|---|---|---|
![]() | ![]() | |
![]() | ![]() | ![]() |
Mergi Tool
Sprite Animation
mergi \
-t "TT" \
-i testdata/mergi_bg_1.png \
-i testdata/mergi_bg_2.png \
-a "sprite 50"
Smooth Animation
mergi \
-t "TT" \
-i testdata/mergi_bg_1.png \
-i testdata/mergi_bg_2.png \
-a "smooth 5"
Mergi Library
image1, _ := mergi.Import(impexp.NewFileImporter("./testdata/mergi_bg_1.png"))
image2, _ := mergi.Import(impexp.NewFileImporter("./testdata/mergi_bg_2.png"))
gif, _ := mergi.Animate([]image.Image{image1, image2}, 50)
mergi.Export(impexp.NewAnimationExporter(gif, "out.gif"))
🔥 Easing
InBounce | InBack | InOutQuad | InSine |
InCubic | InElastic | InOutExpo | Linear |
InOutBounce | InCirc | InOutCubic | InOutQuart |
InOutBack | InCubic | InOutCirc | InOutSine |
InExpo | OutBounce | InQuint |
Mergi Library
Note: Ease function can be applied with any function, in this example it's applied with Watermark function
// Load background and the square images
square, _ := mergi.Import(impexp.NewFileImporter("./testdata/square.jpg"))
bg, _ := mergi.Import(impexp.NewFileImporter("./testdata/white_bg.jpg"))
// Init images frames to add applied ease frames
frames := make([]image.Image, 0)
// Init the limts of the Ease
to := bg.Bounds().Max.X - square.Bounds().Max.X
posY := bg.Bounds().Max.Y/2 - square.Bounds().Max.Y/2
speed := 4
// Ease from 0 to width of background
for i := 0; i < to; i += speed {
// Apply Easeing function InBounce
posX := mergi.Ease(float64(i), 0, float64(to), mergi.InBounce)
img, _ := mergi.Watermark(square, bg, image.Pt(int(posX), posY))
frames = append(frames, img)
}
// For preview example, save as a gif
gif, _ := mergi.Animate(frames, 1)
mergi.Export(impexp.NewAnimationExporter(gif, "out.gif"))
🦎 Transition
SlideBar | Ink1 | Ink2 | Ink3 |
ScaleUpFastRect | ScaleDownFastRect | ScaleUpFastCircle | ScaleDownFastCircle |
Learn more examples
💻 Contribute
- Clone the repository
$ go get github.com/noelyahan/mergi
- Run unit tests
- Fix bug
- Add new feature
- Push
🌠 Contributors
| Noel💻 📖 💬 👀 🤔 🎨 |
|---|
This project follows the all-contributors specification. Contributions of any kind are welcome!
Star History
🔵 License
This project is licensed under the MIT License - see the LICENSE.md file for details
Frequently Asked Questions
What is mergi?
mergi is a Images library for the Go programming language. Tool & Go library for image manipulation (Merge, Crop, Resize, Watermark, Animate)
How do I install mergi?
Install mergi with the Go module system using `go get noelyahan/mergi`. Check the repository for the current installation instructions.
What category does mergi belong to?
mergi is listed under Images, specifically Images.










InBounce
InBack
InOutQuad
InSine
InCubic
InElastic
InOutExpo
Linear
InOutBounce
InCirc
InOutCubic
InOutQuart
InOutBack
InOutCirc
InOutSine
InExpo
OutBounce
InQuint
SlideBar
Ink1
Ink2
Ink3
ScaleUpFastRect
ScaleDownFastRect
ScaleUpFastCircle
ScaleDownFastCircle