JSP随机验证图片如何制作
小编整理了一篇关于模仿腾讯随机验证图片的文章。下面直接上代码吧!一个Java类和一个JSP页面。
Java类代码:
以下是JSP模仿腾讯随机验证图片引用片段:
packageicewee.image; importjava.awt.BasicStroke; importjava.awt.Color; importjava.awt.Font; importjava.awt.Graphics2D; importjava.awt.RenderingHints; importjava.awt.geom.Line2D; importjava.awt.image.BufferedImage; importjava.util.Random; publicclassTokenUtil{ privatestaticfinalStringbase="23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefhijklmnpqrstuvwxyz"; privatestaticfinalintlength=base.length(); publicstaticBufferedImagecreateTokenImage(intwidth,intheight, StringrandomCode){ BufferedImageimage=newBufferedImage(width,height, BufferedImage.TYPE_INT_RGB); Graphics2Dg=image.createGraphics(); Randomrandom=newRandom(); g.setColor(newColor(230,230,250));//设置背景色 g.fillRect(0,0,width,height);//填充背景 g.setColor(Color.BLACK); //绘制边缘 g.drawRect(-1,-1,width+1,height+1); g.setColor(Color.GRAY); //设置字体,随机选择字体,暂设置8种字体 Fontfont=newFont((newString[]{"Arial","ArialBlack", "ArialItalic","CourierNew","CourierNewBoldItalic", "CourierNewItalic","FranklinGothicMedium", "FranklinGothicMediumItalic"})[random.nextInt(8)], Font.PLAIN,30); //g.setStroke(newBasicStroke((float)(Math.random()), //BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL)); g.setFont(font); //定义字体颜色范围 intred=random.nextInt(160),green=random.nextInt(50),blue=random .nextInt(50); //定义一个无干扰线区间和一个起始位置 intnor=random.nextInt(50),rsta=random.nextInt(131); //绘制干扰正弦曲线M:曲线平折度,D:Y轴常量V:X轴焦距 intM=random.nextInt(15)+5,D=random.nextInt(23)+15,V=random .nextInt(5)+1; doublex=0.0; doubley=M*Math.sin(Math.toRadians(V*x))+D; doublepx,py; for(inti=0;i<131;i++){ px=x+1; py=M*Math.sin(Math.toRadians(V*px))+D; if(rsta<i&&i<(rsta+nor)) g.setColor(newColor(230,230,250)); else g.setColor(newColor(red,green,blue)); //随机设置像素点宽带(线宽) g.setStroke(newBasicStroke((float)(Math.random()+1.5f))); g.draw(newLine2D.Double(x,y,px,py)); x=px; y=py; } char[]codes=randomCode.toCharArray(); for(inti=0;i<codes.length;i++){ //旋转图形 intdegree=(random.nextInt(20)-10)%360; doubleang=degree*0.0174532925;//将角度转为弧度 g.rotate(ang,width/2,height/2); g.setColor(newColor(red,green,blue)); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); intgr=random.nextInt(8); g.drawString(String.valueOf(codes[i]),24*i+10+gr,38); } g.dispose(); returnimage; } publicstaticStringcreateRandomCode(intsize,intwidth,intheight){ StringBufferrandomCode=newStringBuffer(); for(inti=0;i<size;i++){ Randomrandom=newRandom(); intstart=random.nextInt(length); StringstrRand=base.substring(start,start+1); randomCode.append(strRand); } returnrandomCode.toString(); } }
JSP页面:
以下是JSP模仿腾讯随机验证图片代码引用片段:
<%@pagecontentType="image/jpeg"pageEncoding="GBK"%> <%@pageimport="java.awt.image.BufferedImage"%> <%@pageimport="javax.imageio.ImageIO"%> <%@pageimport="com.icesoft.image.TokenUtil"%> <% //设置页面不缓存 response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires",0); intwidth=120,height=50; StringrandomCode=TokenUtil.createRandomCode(4,width,height); System.out.println("生成的随机码:"+randomCode); BufferedImageimage=TokenUtil.createTokenImage(width,height,randomCode); ImageIO.write(image,"JPEG",response.getOutputStream()); response.flushBuffer(); out.clear(); out=pageContext.pushBody(); %>
以上就是JSP模仿腾讯随机验证图片全部代码,希望对大家的学习有所帮助。