go 绘制图片和文字

素材

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
}

 效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值