servlet生成随机图片(验证码)的方法

传智视频学习笔记,仅供参考!不足之处还望多多指教!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);

 }
}

转载于:https://www.cnblogs.com/alern/archive/2012/09/19/2694270.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值