java Google图片验证码_SpringBoot使用谷歌方式生成图片验证码

package com.zys.springboottestexample.common.kaptcha;

import com.google.code.kaptcha.util.Configurable;

import java.awt.*;

import java.awt.font.FontRenderContext;

import java.awt.font.GlyphVector;

import java.awt.image.BufferedImage;

import java.util.Random;/**

* 验证码字体生成(根据文字内容)*/

public classKaptchaWordRenderer extends Configurable implements com.google.code.kaptcha.text.WordRenderer {publicKaptchaWordRenderer() {

}

@Overridepublic BufferedImage renderWord(String word, int width, intheight) {int fontSize = this.getConfig().getTextProducerFontSize();

Font[] fonts= this.getConfig().getTextProducerFonts(fontSize);int charSpace = this.getConfig().getTextProducerCharSpace();

BufferedImage image= new BufferedImage(width, height, 2);

Graphics2D g2D=image.createGraphics();

g2D.setColor(Color.WHITE);

RenderingHints hints= newRenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

hints.add(newRenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));

g2D.setRenderingHints(hints);

g2D.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL));

FontRenderContext frc=g2D.getFontRenderContext();

Random random= newRandom();int startPosY = (height - fontSize) / 5 +fontSize;char[] wordChars =word.toCharArray();

Font[] chosenFonts= newFont[wordChars.length];int[] charWidths = new int[wordChars.length];int widthNeeded = 0;intstartPosX;for(startPosX = 0; startPosX < wordChars.length; ++startPosX) {

chosenFonts[startPosX]=fonts[random.nextInt(fonts.length)];char[] charToDraw = new char[]{wordChars[startPosX]};

GlyphVector gv=chosenFonts[startPosX].createGlyphVector(frc, charToDraw);

charWidths[startPosX]= (int)gv.getVisualBounds().getWidth();if (startPosX > 0) {

widthNeeded+= 2;

}

widthNeeded+=charWidths[startPosX];

}

startPosX= (width - widthNeeded) / 2;for(int i = 0; i < wordChars.length; ++i) {

g2D.setColor(KaptchaColor.getColor());

g2D.setFont(chosenFonts[i].deriveFont(Font.PLAIN));char[] charToDraw = new char[]{wordChars[i]};

g2D.drawChars(charToDraw,0, charToDraw.length, startPosX, startPosY);

startPosX= startPosX + charWidths[i] +charSpace;

}returnimage;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值