mergi

go library for image programming (merge, crop, resize, watermark, animate, ease, transit)

Github stars Tracking Chart

Mergi

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, srcImage, dstImage
dstImage, srcImage, dstImage

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, dstImage

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, dstImage

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, dstImage, dstImage

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, dstImage, dstImage
srcImage, dstImage, dstImage

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

, , ,
-----------------------, ----------------------, ----------------------, ----------------------
dstImageInBounce, dstImageInBack, dstImageInOutQuad, dstImageInSine
dstImageInCubic, dstImageInElastic, dstImageInOutExpo, dstImageLinear
dstImageInOutBounce, dstImageInCirc, dstImageInOutCubic, dstImageInOutQuart
dstImageInOutBack, dstImageInCubic, dstImageInOutCirc, dstImageInOutSine
dstImageInExpo, dstImageOutBounce, dstImageInQuint

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

, , ,
-----------------------, ----------------------, ----------------------, ----------------------
dstImageSlideBar, dstImageInk1, dstImageInk2, dstImageInk3
dstImageScaleUpFastRect, dstImageScaleDownFastRect, dstImageScaleUpFastCircle, dstImageScaleDownFastCircle

Learn more examples

? Contribute

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

? Contributors

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 file for details

Main metrics

Overview
Name With Ownernoelyahan/mergi
Primary LanguageGo
Program languageGo (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2018-09-24 03:40:47
Pushed At2024-11-05 05:58:08
Last Commit At2024-11-05 11:28:07
Release Count1
Last Release Name0.1.0 (Posted on )
First Release Name0.1.0 (Posted on )
用户参与
Stargazers Count238
Watchers Count6
Fork Count26
Commits Count58
Has Issues Enabled
Issues Count3
Issue Open Count2
Pull Requests Count6
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private