java 点击图片_java实现点击图片文字验证码

原文:http://blog.csdn.net/qq_26680031/article/details/51168527

效果图如上,

6d46f6727e91a9394df1508a8b0d48f6.png

package cn.gdin.captcha;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class JcaptchaServlet extends HttpServlet {

Random random = new Random();

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

int height = 220;  //图片高

int width = 220;  //图片宽

BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);

Graphics2D g =  (Graphics2D) image.getGraphics();

String picPath= JcaptchaServlet.class.getClassLoader().getResource("../image/"+(random.nextInt(4)+1)+".jpg").getPath();  读取本地图片,做背景图片

g.drawImage(ImageIO.read(new File(picPath)), 0, 20, width, height, null); //将背景图片从高度20开始

g.setColor(Color.white);  //设置颜色

g.drawRect(0, 0, width-1, height-1); //画边框

g.setFont(new Font("宋体",Font.BOLD,20)); //设置字体

Integer x=null,y=null;  //用于记录坐标

String target=null; // 用于记录文字

for(int i=0;i<4;i++){  //随机产生4个文字,坐标,颜色都不同

g.setColor(new Color(random.nextInt(50)+200, random.nextInt(150)+100, random.nextInt(50)+200));

String str=getRandomChineseChar();

int a=random.nextInt(width-100)+50;

int b=random.nextInt(height-70)+55;

if(x==null){

x=a; //记录第一个x坐标

}

if(y==null){

y=b;//记录第一个y坐标

}

if(target==null){

target=str; //记录第一个文字

}

g.drawString(str, a, b);

}

g.setColor(Color.white);

g.drawString("点击"+target, 0,20);//写入验证码第一行文字  “点击..”

request.getSession().setAttribute("gap",x+":"+y);//将坐标放入session

//5.释放资源

g.dispose();

//6.利用ImageIO进行输出

ImageIO.write(image, "jpg", response.getOutputStream()); //将图片输出

}

//网上找的,随机产生汉字的方法

public  String getRandomChineseChar()

{

String str = null;

int hs, ls;

Random random = new Random();

hs = (176 + Math.abs(random.nextInt(39)));

ls = (161 + Math.abs(random.nextInt(93)));

byte[] b = new byte[2];

b[0] = (new Integer(hs).byteValue());

b[1] = (new Integer(ls).byteValue());

try

{

str = new String(b, "GBk"); //转成中文

}

catch (UnsupportedEncodingException ex)

{

ex.printStackTrace();

}

return str;

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

前端代码

$(function(){

$("#image").click(function(event){

var obj=this;

var x=event.offsetX;//获取点击时鼠标相对图片坐标

var y=event.offsetY;

$.ajax({

url:"login.shtml", //ajax提交

type:"post",

data:{‘x‘:x,"y":y},

success:function(data){

alert(data)

obj.src=obj.src+"?date="+new Date();

}

})

});

})

        captcha.svl

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值