CaptchaController.groovy
上传用户:steveyhw
上传日期:2019-05-13
资源大小:307k
文件大小:3k
源码类别:

PlugIns编程

开发平台:

Java

  1. import java.awt.Color;
  2. import java.awt.Font;
  3. import java.awt.Graphics2D;
  4. import java.awt.RenderingHints;
  5. import java.awt.geom.Rectangle2D;
  6. import java.awt.image.BufferedImage;
  7. import java.io.*;
  8. class CaptchaController {
  9. private static final String SOURCECHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  10. def index = {
  11. response.setContentType("image/png");
  12. response.setHeader("Cache-control", "no-cache");
  13. // Generate and remember the Source Character string (6 characters)
  14. int l = SOURCECHARS.length();
  15. StringBuffer b = new StringBuffer();
  16. 6.times {
  17.     int r = (int)(Math.random() * l);
  18.     b.append(SOURCECHARS.charAt(r));
  19. }
  20. final int height = 200;
  21. final int width = 200;
  22. final int space = 8;
  23. System.setProperty("java.awt.headless", "true");
  24. BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  25. Graphics2D g2d = bufferedImage.createGraphics();
  26. Font font = new Font("Serif", Font.BOLD, 18);
  27. g2d.setFont(font);
  28. g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  29. Rectangle2D fontRect = font.getStringBounds(b.toString(), g2d.getFontRenderContext());
  30. // Now, create a graphic "space" pixels wider and taller than the the font
  31. bufferedImage = new BufferedImage((int)fontRect.getWidth() + space,
  32.     (int)fontRect.getHeight() + space,
  33.     BufferedImage.TYPE_INT_RGB);
  34. g2d = bufferedImage.createGraphics();
  35. g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  36. g2d.setFont(font);
  37. // Draw the background
  38. g2d.setColor(Color.WHITE);
  39. g2d.fillRect(0, 0, width, height);
  40. // Draw the lines
  41. g2d.setColor(Color.GRAY);
  42. int x1, y1, x2, y2;
  43. final int step = 10;
  44. x1 = 0;
  45. y1 = step;
  46. x2 = step;
  47. y2 = 0;
  48. while (x1 < width || x2 < width || y1 < height || y2 < height)
  49. {
  50.     g2d.drawLine(x1, y1, x2, y2);
  51.     if (y1 < height)
  52.     {
  53. x1 = 0;
  54. y1 += step;
  55.     }
  56.     else if (x1 < width)
  57.     {
  58. y1 = height;
  59. x1 += step;
  60.     }
  61.     else
  62.     {
  63. x1 = width;
  64. y1 = height;
  65.     }
  66.     if (x2 < width)
  67.     {
  68. y2 = 0;
  69. x2 += step;
  70.     }
  71.     else if (y2 < height)
  72.     {
  73. x2 = width;
  74. y2 += step;
  75.     }
  76.     else
  77.     {
  78. y2 = height;
  79. x2 = width;
  80.     }
  81. }
  82. // Draw the String
  83. g2d.setColor(Color.BLACK);
  84. g2d.drawString(b.toString(), (int)(space/2), (int)(space/4) + (int)fontRect.getHeight());
  85. OutputStream out = response.getOutputStream();
  86. javax.imageio.ImageIO.write(bufferedImage, "PNG", out);
  87. out.close();
  88. //def session = request.getSession(true);
  89. session.setAttribute("captcha", b.toString());
  90. }
  91. }