1,缩略图是当今web站点,尤其是提供图片信息浏览功能的网站,都会使用到的技术,它能够有效的提高用户浏览信息的速度。
2,缩略图与原图的本质区别是文件大小骤减,对于浏览型的图片来说,缩略图就是在不失去原有的浏览效果的前提下提高浏览速度的作用。
3,
...
response.setContentType("image/jpeg");
FileInputStream fin=new FileInputStream("E:\\Users\\lizi\\Workspaces\\MyEclipse 8.5\\JSPTest\\src\\javal.jpg");
Image src=ImageIO.read(fin);
int h=60;
int w=60;
BufferedImage tag=new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src, 0, 0, w, h, null);
ImageIO.write(tag, "JPEG", response.getOutputStream());
...
4,图形验证码是为了防止恶意注册和登录而设计的。有些恶意程序(如注册机)可以进行不断的注册和登录尝试。如果没有图形验证码,web服务器会不堪重负,有时还会短时间内占满服务器的磁盘空间。图形验证码可以很好的解决这类问题,因为随机的验证码是以图形的方式呈现给用户的,还包含了一些干扰点,只能肉眼才能看清楚验证码的值。
5,图形验证码的原理其实很简单,在用户注册或登录前,生成一个随机的验证码并保存在会话session中,用户提交请求以后,首先验证输入的验证码是否正确,如果错误则直接返回。所以图形验证码的核心在于如何使用java的2D图形编程API来绘制生成的验证码和干扰点,然后再把生成的图片对象写到客户端。
以下是使用动态图形验证码的基本步骤:
(1)创建一个图形对象。一般还要初始化背景颜色和边框。
int width=60,height=20;//定义宽度和高度
//在内存中创建图像
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();//获取图形上下文
g.setClor(new Color(0xDCDCDC));
g.fillRect(0,0,width,height);
g.setColr(Color.black);
g.drawRect(0,0,width-1,height-1);
(2)产生随机数字。如果位数不足还需补零,以下是生成4位长度的随机数字示例代码:
//取随机产生的验证码(4位)
//设置返回内容的MIME类型,这里是jpeg图片。
response.setContentType("image/jpeg");
//为了保证每次的验证码每次访问都是新的,需要指定验证码图片不从浏览器缓存里获得。
response.setHeader("Cache-Control","no-cache,nust-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("Last-Modified", new Date().toString());
response.setDateHeader("Expires",0);
//在内存中创建图像。
int width=60,height=20;
BufferedImage image=new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
Graphics g=image.getGraphics();
//设定背景色
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, width, height);
//画边框
g.setColor(Color.black);
g.drawRect(0, 0, width-1, height-1);
//随机产生的验证码(4位数),小于4位的的前面补零。
Random r=new Random();
int rst=0;
while((rst=r.nextInt(10000))<0){
}
String rand=rst+"";
switch (rand.length()) {
case 1:
rand="000"+rand;
break;
case 2:
rand="00"+rand;
break;
case 3:
rand="0"+rand;
break;
default:
rand=rand.substring(0, 4);
break;
}
//将验证码存入session
request.getSession().setAttribute("rand",rand);
// 将验证码显示到图像中
g.setColor(Color.red);
g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
g.drawString(rand.charAt(0)+"",8 ,17);
g.drawString(rand.charAt(1)+"", 20, 15);
g.drawString(rand.charAt(2)+"", 35,18 );
g.drawString(rand.charAt(3)+"",45, 15);
//随机产生50个干扰点,使图像中的验证码不已被其他程序探测到
Random random=new Random();
for (int i = 0; i < 1500; i++) {
int x=random.nextInt(width);
int y=random.nextInt(width);
g.drawOval(x, y, 0, 0);
}
g.dispose();//图形生效
//输出图形到页面
ImageIO.write(image, "JPEG", response.getOutputStream());