修复验证码文字Y轴不正确

This commit is contained in:
xh
2025-09-18 19:38:38 +08:00
parent e1454b3802
commit 1c1d27681e
5 changed files with 13 additions and 8 deletions

View File

@@ -17,7 +17,7 @@ var captchaConfig = captcha_config.Config{
Text: "",
},
ClickWord: &captcha_config.ClickWordConfig{
FontSize: 22,
FontSize: 24,
FontNum: 3,
AllFontNum: 7,
XOffset: 8,

View File

@@ -2,7 +2,7 @@ package captcha_config
const (
// CodeKeyPrefix 缓存key前缀
CodeKeyPrefix = "RUNNING:CAPTCHA:%s"
CodeKeyPrefix = "x:captcha:%s"
// BlockPuzzleCaptcha 滑动验证码服务标识
BlockPuzzleCaptcha = "blockPuzzle"

View File

@@ -222,6 +222,7 @@ func (b *BlockPuzzleCaptchaService) Check(token string, pointJson string) error
return nil
}
cache.Delete(codeKey)
return errors.New("验证失败")
}

View File

@@ -54,15 +54,19 @@ func (c *ClickWordCaptchaService) Check(token string, pointJson string) error {
if err != nil {
return err
}
XOffset := c.factory.config.ClickWord.XOffset
YOffset := c.factory.config.ClickWord.YOffset
fontSize := c.factory.config.ClickWord.FontSize
for i, pointVO := range cachePoint {
targetPoint := userPoint[i]
userTargetPoint := userPoint[i]
startX := pointVO.X - c.factory.config.ClickWord.XOffset
endX := pointVO.X + fontSize + c.factory.config.ClickWord.XOffset
if targetPoint.X >= pointVO.X-XOffset && targetPoint.X <= pointVO.X+fontSize+XOffset && targetPoint.Y >= pointVO.Y-YOffset && targetPoint.Y <= pointVO.Y+fontSize+YOffset {
startY := pointVO.Y - c.factory.config.ClickWord.YOffset
endY := pointVO.Y + fontSize + c.factory.config.ClickWord.YOffset
if userTargetPoint.X >= startX && userTargetPoint.X <= endX && userTargetPoint.Y >= startY && userTargetPoint.Y <= endY {
} else {
c.factory.GetCache().Delete(codeKey)
return errors.New("验证失败")
}
}
@@ -130,7 +134,7 @@ func (c *ClickWordCaptchaService) getImageData(image *util.ImageUtil) ([]vo.Poin
key := util.RandString(16)
for k, s := range AllWord {
fontSize := util.RandomInt(c.factory.config.ClickWord.FontSize-2, c.factory.config.ClickWord.FontSize+2)
fontSize := util.RandomInt(c.factory.config.ClickWord.FontSize-3, c.factory.config.ClickWord.FontSize+1)
point := c.randomWordPoint(image.Width, image.Height, fontSize)
point.SetSecretKey(key)

View File

@@ -112,7 +112,7 @@ func (i *ImageUtil) SetArtText(text string, fontsize int, point vo.PointVO) erro
// 设置绘制操作的源图像,通常为 image.Uniform
fc.SetSrc(image.NewUniform(color.RGBA{R: uint8(RandomInt(1, 200)), G: uint8(RandomInt(1, 200)), B: uint8(RandomInt(1, 200)), A: 255}))
// 设置水印地址
pt := freetype.Pt(point.X, point.Y)
pt := freetype.Pt(point.X, point.Y+fontsize)
// 根据 Pt 的坐标值绘制给定的文本内容
_, err := fc.DrawString(text, pt)
if err != nil {