传智视频学习笔记,仅供参考!不足之处还望多多指教!servlet生成随机图片(验证码)的方法

 

 

public class ValiImg extends HttpServlet {

 
 private static final long serialVersionUID = 5850201930486930392L;

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  BufferedImage img = new BufferedImage(150, 30,
    BufferedImage.TYPE_INT_RGB);// 构建一个图片
  Graphics g = img.getGraphics();// 得到一个图形然后才能在这个图形上画。。。。
  // 设置背景色
  setBackGround(g);

  // 设置边框
  setBorder(g);

  // 画干扰线
  drawRandomLine(g);

  // 写随机字
  drawRandomNum((Graphics2D) g);

  // 图形写给浏览器,设置浏览器打开方式
  response.setContentType("image/jpeg");
  ImageIO.write(img, "jpg", response.getOutputStream());//使用支持给定格式的任意 ImageWriter 将一个图像写入 OutputStream
 }

 // 写随机字
 private void drawRandomNum(Graphics2D g) {
  g.setColor(Color.BLUE);//设置颜色
  g.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, 20));//设置字体属性
  String str = "到底怎么办到随机生成汉字的呢汉字从哪里来的呢是不是有个后台数据表其中存放了所需要的所有汉字使用程序随机取出几个汉字组合就行了呢使用后台数据库先";
  int x = 10;
  for (int i = 0; i < 4; i++) {
   int rot = new Random().nextInt() % 30;//随机生成一个±30之间的整数
   g.rotate(rot * Math.PI / 180, x, 20);//设置图形的旋转角度
   g.drawString(str.charAt(new Random().nextInt(str.length())) + "",
     x, 22);//在图形上写字
   g.rotate(-rot * Math.PI / 180, x, 20);//恢复旋转
   x += 33;
  }
 }

 // 画干扰线
 private void drawRandomLine(Graphics g) {
  g.setColor(Color.RED);
  for (int i = 0; i < 5; i++) {
   g.drawLine(new Random().nextInt(148), new Random().nextInt(28),
     new Random().nextInt(148), new Random().nextInt(28));
  }
 }

 // 设置边框
 private void setBorder(Graphics g) {
  g.setColor(Color.BLUE);
  g.drawRect(0, 0, 149, 29);//画一个矩形
 }

 // 设置背景色
 private void setBackGround(Graphics g) {
  g.setColor(Color.WHITE);
  g.fillRect(0, 0, 150, 30);//填充
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);

 }
}

posted on 2012-09-19 20:28  艾边诚  阅读(290)  评论(0编辑  收藏  举报