素材
132.jpg
a.jpg
代码
package main
import (
"embed"
"fmt"
"github.com/fogleman/gg"
"github.com/golang/freetype"
"github.com/nfnt/resize"
"image"
"image/draw"
"image/jpeg"
"image/png"
"io/ioutil"
"os"
"time"
)
//go:embed a.jpg 132.jpg
var fs embed.FS
func main() {
now := time.Now()
err := poster()
since := time.Since(now)
fmt.Println(since, err)
}
func poster() error {
back, err := fs.Open("a.jpg")
if err != nil {
return err
}
code, err := fs.Open("132.jpg")
if err != nil {
return err
}
badec, err := jpeg.Decode(back)
if err != nil {
return err
}
codec, err := jpeg.Decode(code)
if err != nil {
return err
}
x := codec.Bounds().Size().X
y := codec.Bounds().Size().Y
w := x
h := y
dc := gg.NewContext(w, h)
dc.DrawCircle(float64(w/2), float64(h/2), float64(w/2))
dc.Clip()
dc.DrawImage(codec, 0, 0)
im := dc.Image()
ri := resize.Resize(uint(w/2), 0, im, resize.Lanczos3)
rgba := image.NewRGBA(badec.Bounds())
draw.Draw(rgba, rgba.Bounds(), badec, image.Point{
X: 0,
Y: 0,
}, draw.Src)
draw.Draw(rgba, rgba.Bounds(), ri, image.Point{
X: -389,
Y: -10,
}, draw.Over)
err = drawText(rgba, "水ni23好ཀᮨ້໌ꦿꦸ钟᭄", 470, 40)
if err != nil {
return err
}
create, err := os.Create("new.png")
if err != nil {
return err
}
err = png.Encode(create, rgba)
return err
}
func drawText(dst draw.Image, s string, x, y int) error {
file, err := ioutil.ReadFile("C:/Windows/Fonts/MSYHL.TTC")
if err != nil {
return err
}
font, err := freetype.ParseFont(file)
if err != nil {
return err
}
con := freetype.NewContext()
con.SetFont(font)
con.SetFontSize(18)
con.SetDst(dst)
con.SetSrc(image.White)
con.SetClip(dst.Bounds())
_, err = con.DrawString(s, freetype.Pt(x, y))
return err
}
效果