Popularity
4.7
Growing
Activity
0.0
-
115
6
15

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

mergi alternatives and similar packages

Based on the "Images" category

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

Add another 'Images' Package

README

[Mergi](./logo/logo.png)

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

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
[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
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
[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๐Ÿ’ป ๐Ÿ“– ๐Ÿ’ฌ ๐Ÿ‘€ ๐Ÿค” ๐ŸŽจ

<!-- ALL-CONTRIBUTORS-LIST:END -->

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.