如何让字体在图片中上下左右居中显示?
package cn.com.webpro.web.actions.util;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import javax.imageio.*;
import org.apache.struts2.ServletActionContext;
import cn.com.webpro.web.actions.base.BaseAction;
/**
- 图片验证
-
@author Pitt
*/
public class VertifyAction extends BaseAction{private static final long serialVersionUID = 1L;
//定义图形验证码中绘制字符的字体
private final Font mFont = new Font("Arial Black", Font.PLAIN, 23);//定义图形验证码的大小
private final int IMG_WIDTH = 155;
private final int IMG_HEIGTH = 28;//定义一个获取随机颜色的方法
private Color getRandColor(int fc,int bc){
Random random = new Random();
if(fc > 255) fc = 255;
if(bc > 255) bc=255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
//得到随机颜色
return new Color(r , g , b);
}//重写service方法,生成对客户端的响应
public String execute()throws ServletException, IOException {
HttpServletResponse response=ServletActionContext.getResponse();
HttpServletRequest request=ServletActionContext.getRequest();
//设置禁止缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
BufferedImage image = new BufferedImage(IMG_WIDTH , IMG_HEIGTH , BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200 , 250));
//填充背景色
g.fillRect(1, 1, IMG_WIDTH - 1, IMG_HEIGTH - 1);//为图形验证码绘制边框 g.setColor(new Color(102 , 102 , 102)); g.drawRect(0, 0, IMG_WIDTH - 1, IMG_HEIGTH - 1); g.setColor(getRandColor(160,200)); //生成随机干扰线 for (int i = 0 ; i < 80 ; i++){ int x = random.nextInt(IMG_WIDTH - 1); int y = random.nextInt(IMG_HEIGTH - 1); int xl = random.nextInt(6) + 1; int yl = random.nextInt(12) + 1; g.drawLine(x , y , x + xl , y + yl); } g.setColor(getRandColor(160,200)); //生成随机干扰线 for (int i = 0 ; i < 80 ; i++){ int x = random.nextInt(IMG_WIDTH - 1); int y = random.nextInt(IMG_HEIGTH - 1); int xl = random.nextInt(12) + 1; int yl = random.nextInt(6) + 1; g.drawLine(x , y , x - xl , y - yl); } //设置绘制字符的字体 g.setFont(mFont); //用于保存系统生成的随机字符串 String sRand = ""; for (int i = 0 ; i < 6 ; i++){ String tmp = getRandomChar(); sRand += tmp; //获取随机颜色 g.setColor(new Color(20 + random.nextInt(110) ,20 + random.nextInt(110) ,20 + random.nextInt(110))); //在图片上绘制系统生成的随机字符 g.drawString(tmp , 15 * i + 10,15); } //获取HttpSesssion对象 HttpSession session = request.getSession(true); //将随机字符串放入HttpSesssion对象中 session.setAttribute("rand" , sRand); g.dispose(); //向输出流中输出图片 ImageIO.write(image, "JPEG", response.getOutputStream()); return null;
}
//定义获取随机字符串方法
private String getRandomChar(){
//生成一个0、1、2的随机数字
// int rand = (int)Math.round(Math.random() * 2);
long itmp = 0;
// char ctmp = '\u0000';
// switch (rand)
// {
// //生成大写字母
// case 1:
// itmp = Math.round(Math.random() * 25 + 65);
// ctmp = (char)itmp;
// return String.valueOf(ctmp);
// //生成小写字母
// case 2:
// itmp = Math.round(Math.random() * 25 + 97);
// ctmp = (char)itmp;
// return String.valueOf(ctmp);
//生成数字
// default :
itmp = Math.round(Math.random() * 9);
return itmp + "";
// }
}
}
效果图:附件。