init
This commit is contained in:
85
utils/verify_image_plugin.go
Normal file
85
utils/verify_image_plugin.go
Normal file
@@ -0,0 +1,85 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"image"
|
||||
"image/color"
|
||||
"image/draw"
|
||||
_ "image/jpeg"
|
||||
"image/png"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/golang/freetype"
|
||||
"golang.org/x/image/font"
|
||||
)
|
||||
|
||||
type VerifyImagePlugin struct{}
|
||||
|
||||
func (*VerifyImagePlugin) DrawText(originalImage, newImage, text, fontPath string) (string, error) {
|
||||
srcFile, err := os.Open(originalImage) // 替换为你的图片路径
|
||||
if err != nil {
|
||||
log.Fatal("图片打开失败:", err)
|
||||
return "", err
|
||||
}
|
||||
defer srcFile.Close()
|
||||
|
||||
// 解码原始图片
|
||||
img, _, err := image.Decode(srcFile)
|
||||
if err != nil {
|
||||
log.Fatal("图片解码失败,只支持jpg、png:", err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
rgba := image.NewRGBA(img.Bounds())
|
||||
draw.Draw(rgba, rgba.Bounds(), img, image.Point{}, draw.Src)
|
||||
var fontStr string = fontPath
|
||||
if fontPath == "" {
|
||||
fontStr = "fonts/AlibabaPuHuiTi-3-115-Black.ttf"
|
||||
}
|
||||
fontBytes, err := os.ReadFile(fontStr) // 替换为你的字体路径
|
||||
if err != nil {
|
||||
log.Fatal("字体加载失败:", err)
|
||||
return "", err
|
||||
}
|
||||
fontObj, err := freetype.ParseFont(fontBytes)
|
||||
if err != nil {
|
||||
log.Fatal("字体解析失败:", err)
|
||||
return "", err
|
||||
}
|
||||
|
||||
c := freetype.NewContext()
|
||||
c.SetDPI(72) // 屏幕分辨率
|
||||
c.SetFont(fontObj) // 设置中文字体
|
||||
c.SetFontSize(40) // 字体大小(磅)
|
||||
c.SetClip(rgba.Bounds()) // 绘制区域
|
||||
c.SetDst(rgba) // 目标画布
|
||||
c.SetSrc(image.NewUniform(color.RGBA{ // 文字颜色
|
||||
R: 255,
|
||||
G: 255,
|
||||
B: 255,
|
||||
A: 255,
|
||||
}))
|
||||
c.SetHinting(font.HintingFull) // 增强小字清晰度
|
||||
|
||||
x := 150 // 水平起始位置
|
||||
y := 250 // 垂直起始位置
|
||||
yBase := y + int(c.PointToFixed(40)>>6) // 关键:修正垂直偏移
|
||||
pt := freetype.Pt(x, yBase)
|
||||
|
||||
if _, err := c.DrawString(text, pt); err != nil {
|
||||
log.Fatal("文字绘制失败:", err)
|
||||
}
|
||||
|
||||
outFile, err := os.Create(newImage)
|
||||
if err != nil {
|
||||
log.Fatal("输出文件创建失败:", err)
|
||||
return "", err
|
||||
}
|
||||
defer outFile.Close()
|
||||
if err := png.Encode(outFile, rgba); err != nil {
|
||||
log.Fatal("图片保存失败:", err)
|
||||
return "", err
|
||||
}
|
||||
log.Println("成功生成:output.png")
|
||||
return newImage, nil
|
||||
}
|
||||
Reference in New Issue
Block a user