forked from noelyahan/mergi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
100 lines (83 loc) · 2.78 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package main
import (
"fmt"
"github.com/noelyahan/mergi"
"github.com/noelyahan/impexp"
"image"
"log"
)
func main() {
// Let's import some images from local file system
img, err := mergi.Import(impexp.NewFileImporter("testdata/tiger-2320819_960_720.jpg"))
if err != nil {
log.Fatal(err)
}
watermarkImage, err := mergi.Import(impexp.NewFileImporter("testdata/mergi_logo_watermark.png"))
if err != nil {
log.Fatal(err)
}
watermarkTopLeft(watermarkImage, img)
watermarkTopLeftWithOpacity(watermarkImage, img)
watermarkResizeTopRightWith(watermarkImage, img)
watermarkEverywhere(watermarkImage, img)
// Just for fun ;)
// Lets create a identity card
identityWatermark()
}
func watermarkTopLeft(watermarkImage, img image.Image) {
res, err := mergi.Watermark(watermarkImage, img, image.Pt(0, 0))
if err != nil {
log.Fatal(err)
}
mergi.Export(impexp.NewFileExporter(res, getPath("watermark_1.png")))
}
func watermarkTopLeftWithOpacity(watermarkImage, img image.Image) {
opecWatermark, err := mergi.Opacity(watermarkImage, 0.5)
if err != nil {
log.Fatal(err)
}
res, err := mergi.Watermark(opecWatermark, img, image.Pt(0, 0))
if err != nil {
log.Fatal(err)
}
mergi.Export(impexp.NewFileExporter(res, getPath("watermark_1_opacity.png")))
}
func watermarkResizeTopRightWith(watermarkImage, img image.Image) {
b := watermarkImage.Bounds()
w := b.Max.X / 4
h := b.Max.Y / 4
newWatermarkImage, _ := mergi.Resize(watermarkImage, uint(w), uint(h))
res, err := mergi.Watermark(newWatermarkImage, img, image.Pt(img.Bounds().Max.X-w, 0))
if err != nil {
log.Fatal(err)
}
mergi.Export(impexp.NewFileExporter(res, getPath("watermark_2.png")))
}
func watermarkEverywhere(watermarkImage, img image.Image) {
b := watermarkImage.Bounds()
w := b.Max.X / 4
h := b.Max.Y / 4
newWatermarkImage, _ := mergi.Resize(watermarkImage, uint(w), uint(h))
res := img
var err error
// Lets add watermarks all over the image
for x := 0; x < w; x++ {
for y := 0; y < h; y++ {
res, err = mergi.Watermark(newWatermarkImage, res, image.Pt(img.Bounds().Max.X-(w*x), h*y))
if err != nil {
log.Fatal(err)
}
}
}
mergi.Export(impexp.NewFileExporter(res, getPath("watermark_3.png")))
}
func identityWatermark() {
idCard, _ := mergi.Import(impexp.NewURLImporter("https://cdn.pixabay.com/photo/2013/07/12/19/03/id-154285_960_720.png"))
profileImage, _ := mergi.Import(impexp.NewURLImporter("https://cdn.pixabay.com/photo/2017/08/30/17/27/business-woman-2697954_960_720.jpg"))
cropedProfile, _ := mergi.Crop(profileImage, image.Pt(300, 50), image.Pt(217, 254))
finalImage, _ := mergi.Watermark(cropedProfile, idCard, image.Pt(20, 63))
mergi.Export(impexp.NewFileExporter(finalImage, getPath("watermark_4.png")))
}
func getPath(name string) string {
return fmt.Sprintf("examples/watermark/res/%s", name)
}