Programming language: Go
License: MIT License
Tags: Images    
Latest version: v0.1.0

mergi alternatives and similar packages

Based on the "Images" category.
Alternatively, view mergi alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of mergi or a related project?

Add another 'Images' Package



Result Terminal Code
Intro 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"

Go Doc Build Status codecov Go Report Card Teligram Chat

: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


 โ•‘โ•‘โ•‘โ•‘โ•ฃ โ• โ•ฆโ•โ•‘ โ•ฆโ•‘
 โ•ฉ โ•ฉโ•šโ•โ•โ•ฉโ•šโ•โ•šโ•โ•โ•ฉ
 let's go & make imaging fun
 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
[dstImage](testdata/mergi_bg_1.png) [srcImage](testdata/mergi_bg_2.png) [dstImage](testdata/doc/merge_tt.png)
[dstImage](testdata/mergi_bg_1.png) [srcImage](testdata/mergi_bg_2.png) [dstImage](testdata/doc/merge_tb.png)
Mergi Tool
mergi \
-t TT \
-i testdata/mergi_bg_1.png \
-i testdata/mergi_bg_2.png
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
[srcImage](testdata/mergi_bg_1.png) [dstImage](testdata/doc/crop.png)
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
[srcImage](testdata/mergi_bg_1.png) [dstImage](testdata/doc/resize.png)
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
[srcImage](testdata/mergi_bg_1.png) [dstImage](testdata/mergi_logo_watermark_90x40.png) [dstImage](testdata/doc/watermark.png)
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
[srcImage](testdata/mergi_bg_1.png) [dstImage](testdata/mergi_bg_2.png) [dstImage](testdata/doc/sprite.gif)
[srcImage](testdata/mergi_bg_1.png) [dstImage](testdata/mergi_bg_2.png) [dstImage](testdata/doc/smooth.gif)
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

[dstImage](testdata/doc/ease/InBounce.gif)InBounce [dstImage](testdata/doc/ease/InBack.gif)InBack [dstImage](testdata/doc/ease/InOutQuad.gif)InOutQuad [dstImage](testdata/doc/ease/InSine.gif)InSine
[dstImage](testdata/doc/ease/InCubic.gif)InCubic [dstImage](testdata/doc/ease/InElastic.gif)InElastic [dstImage](testdata/doc/ease/InOutExpo.gif)InOutExpo [dstImage](testdata/doc/ease/Linear.gif)Linear
[dstImage](testdata/doc/ease/InOutBounce.gif)InOutBounce [dstImage](testdata/doc/ease/InCirc.gif)InCirc [dstImage](testdata/doc/ease/InOutCubic.gif)InOutCubic [dstImage](testdata/doc/ease/InOutQuart.gif)InOutQuart
[dstImage](testdata/doc/ease/InOutBack.gif)InOutBack [dstImage](testdata/doc/ease/InCubic.gif)InCubic [dstImage](testdata/doc/ease/InOutCirc.gif)InOutCirc [dstImage](testdata/doc/ease/InOutSine.gif)InOutSine
[dstImage](testdata/doc/ease/InExpo.gif)InExpo [dstImage](testdata/doc/ease/OutBounce.gif)OutBounce [dstImage](testdata/doc/ease/InQuint.gif)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

[dstImage](./testdata/doc/trans/SlideBar.gif)SlideBar [dstImage](./testdata/doc/trans/Ink1.gif)Ink1 [dstImage](./testdata/doc/trans/Ink2.gif)Ink2 [dstImage](./testdata/doc/trans/Ink3.gif)Ink3
[dstImage](./testdata/doc/trans/ScaleUpFastRect.gif)ScaleUpFastRect [dstImage](./testdata/doc/trans/ScaleDownFastRect.gif)ScaleDownFastRect [dstImage](./testdata/doc/trans/ScaleUpFastCircle.gif)ScaleUpFastCircle [dstImage](./testdata/doc/trans/ScaleDownFastCircle.gif)ScaleDownFastCircle

Learn more [examples](examples)

๐Ÿ’ป Contribute

  • Clone the repository bash $ go get github.com/noelyahan/mergi
  • Run unit tests
  • Fix bug
  • Add new feature
  • Push

๐ŸŒ  Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->

Noel๐Ÿ’ป ๐Ÿ“– ๐Ÿ’ฌ ๐Ÿ‘€ ๐Ÿค” ๐ŸŽจ


This project follows the all-contributors specification. Contributions of any kind are welcome!

๐Ÿ”ต License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details

*Note that all licence references and agreements mentioned in the mergi README section above are relevant to that project's source code only.