mergi

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

Github星跟踪图

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

主要指标

概览
名称与所有者noelyahan/mergi
主编程语言Go
编程语言Go (语言数: 1)
平台
许可证MIT License
所有者活动
创建于2018-09-24 03:40:47
推送于2024-11-05 05:58:08
最后一次提交2024-11-05 11:28:07
发布数1
最新版本名称0.1.0 (发布于 )
第一版名称0.1.0 (发布于 )
用户参与
星数239
关注者数6
派生数26
提交数58
已启用问题?
问题数3
打开的问题数2
拉请求数6
打开的拉请求数0
关闭的拉请求数0
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?