/
main.go
109 lines (91 loc) · 1.97 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
101
102
103
104
105
106
107
108
109
package main
import (
"image"
"image/draw"
"image/jpeg"
"image/png"
"io/ioutil"
"os"
"github.com/golang/freetype"
"github.com/golang/freetype/truetype"
"github.com/nfnt/resize"
)
var strokeFont *truetype.Font
var posterFont *truetype.Font
func init() {
fontBytes, err := ioutil.ReadFile("brush_strokes.ttf")
if err != nil {
panic(err)
}
strokeFont, err = truetype.Parse(fontBytes)
if err != nil {
panic(err)
}
spb, err := ioutil.ReadFile("SansPosterBold.ttf")
if err != nil {
panic(err)
}
posterFont, err = truetype.Parse(spb)
if err != nil {
panic(err)
}
}
func main() {
rightFile, err := os.Open("p1.jpg")
if err != nil {
panic(err)
}
rightPortrait, err := jpeg.Decode(rightFile)
if err != nil {
panic(err)
}
leftFile, err := os.Open("p2.jpg")
if err != nil {
panic(err)
}
leftPortrait, err := jpeg.Decode(leftFile)
if err != nil {
panic(err)
}
rightImage := resize.Resize(400, 600, rightPortrait, resize.Bilinear)
leftImage := resize.Resize(400, 600, leftPortrait, resize.Bilinear)
t, err := os.Open("template.png")
if err != nil {
panic(err)
}
mask, err := png.Decode(t)
if err != nil {
panic(err)
}
newImage := image.NewRGBA(rightImage.Bounds())
draw.Draw(newImage, rightImage.Bounds(), rightImage, image.ZP, draw.Src)
draw.DrawMask(newImage, leftImage.Bounds(), leftImage, image.ZP, mask, image.ZP, draw.Over)
ctx := freetype.NewContext()
ctx.SetFont(strokeFont)
ctx.SetFontSize(84)
ctx.SetSrc(image.Black)
ctx.SetDst(newImage)
ctx.SetClip(newImage.Bounds())
_, err = ctx.DrawString("TOGETHER", freetype.Pt(40, 200))
if err != nil {
panic(err)
}
ctx.SetFont(posterFont)
ctx.SetFontSize(12)
ctx.SetSrc(image.White)
ctx.SetDst(newImage)
ctx.SetClip(newImage.Bounds())
_, err = ctx.DrawString("#VOTETOGETHER", freetype.Pt(150, 580))
if err != nil {
panic(err)
}
f, err := os.Create("newimage.png")
if err != nil {
panic(err)
}
defer f.Close()
err = png.Encode(f, newImage)
if err != nil {
panic(err)
}
}