java实现验证码图片_java实现验证码图片

1 packagesip.utils;2 importjava.awt.Color;3 importjava.awt.Graphics2D;4 importjava.awt.geom.AffineTransform;5 importjava.util.Random;6

7 /**

8 * 验证码图片生成器9 *10 *@authorWuZhengFei11 *12 */

13 public classIdentityCode {14 /**

15 * 验证码图片的宽度。16 */

17 private int width = 80;18 /**

19 * 验证码图片的高度。20 */

21 private int height = 23;22 /**

23 * 验证码的数量。24 */

25 private Random random = newRandom();26

27 publicIdentityCode(){}28 /**

29 * 生成随机颜色30 *@paramfc 前景色31 *@parambc 背景色32 *@returnColor对象,此Color对象是RGB形式的。33 */

34 public Color getRandomColor(int fc, intbc) {35 if (fc > 255)36 fc = 200;37 if (bc > 255)38 bc = 255;39 int r = fc + random.nextInt(bc -fc);40 int g = fc + random.nextInt(bc -fc);41 int b = fc + random.nextInt(bc -fc);42 return newColor(r, g, b);43 }44

45 /**

46 * 绘制干扰线47 *@paramg Graphics2D对象,用来绘制图像48 *@paramnums 干扰线的条数49 */

50 public void drawRandomLines(Graphics2D g ,intnums ){51 g.setColor(this.getRandomColor(160, 200)) ;52 for(int i=0 ; i

61 /**

62 * 获取随机字符串,63 * 此函数可以产生由大小写字母,汉字,数字组成的字符串64 *@paramlength 随机字符串的长度65 *@return随机字符串66 */

67 public String drawRandomString(intlength , Graphics2D g){68 StringBuffer strbuf = newStringBuffer() ;69 String temp = "";70 //int itmp = 0 ;

71 for(int i=0 ; i

117 Color color = new Color(20+random.nextInt(20) , 20+random.nextInt(20) ,20+random.nextInt(20) );118 g.setColor(color) ;119 //想文字旋转一定的角度

120 AffineTransform trans = newAffineTransform();121 trans.rotate(random.nextInt(45)*3.14/180, 15*i+8, 7) ;122 //缩放文字

123 float scaleSize = random.nextFloat() + 0.8f;124 if(scaleSize>1f)125 scaleSize =1f ;126 trans.scale(scaleSize, scaleSize) ;127 g.setTransform(trans) ;128 g.drawString(temp, 15*i+18, 14) ;129

130 strbuf.append(temp) ;131 }132 g.dispose() ;133 returnstrbuf.toString() ;134 }135 public intgetWidth() {136 returnwidth;137 }138 public void setWidth(intwidth) {139 this.width =width;140 }141 public intgetHeight() {142 returnheight;143 }144 public void setHeight(intheight) {145 this.height =height;146 }147 public static voidmain(String[] arg){148 //生成验证码149 //设置不缓存图片

150 response.setHeader("Pragma", "No-cache");151 response.setHeader("Cache-Control", "No-cache");152 response.setDateHeader("Expires", 0) ;153 //指定生成的相应图片

154 response.setContentType("image/jpeg") ;155 IdentityCode idCode = newIdentityCode();156 BufferedImage image =newBufferedImage(idCode.getWidth() , idCode.getHeight() , BufferedImage.TYPE_INT_BGR) ;157 Graphics2D g =image.createGraphics() ;158 //定义字体样式

159 Font myFont = new Font("黑体" , Font.BOLD , 16) ;160 //设置字体

161 g.setFont(myFont) ;162

163 g.setColor(idCode.getRandomColor(200 , 250)) ;164 //绘制背景

165 g.fillRect(0, 0, idCode.getWidth() , idCode.getHeight()) ;166

167 g.setColor(idCode.getRandomColor(180, 200)) ;168 idCode.drawRandomLines(g, 160) ;169 String randomString = idCode.drawRandomString(4, g) ;170 g.dispose() ;171 ImageIO.write(image, "JPEG", response.getOutputStream()) ;172 }173 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA入门级教学之(for循环)

/* 1.循环结构: 在程序中有一些代码段需要重复执行,假如没有循环结构, 就需要重复写代码。 将来把需要反复执行的代码片段放到"循环",再联合计数器,共同控制这段需要反…

如何做推荐系统 java_Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统

今天大部分时间都在写业务代码,然后算是从无到有的配置了下spring与mybatis的集成。SpringMVCMybatis Web开发流程配置数据源在applicationContext.xml中引入数据源的配置:在spring-my-datasource.xml中配置数据源相关的内容:配置完成后&…

JAVA入门级教学之(while循环语句)

/* while循环语句: 1.while(布尔表达式) { 循环体; } 2.while循环的执行原理: 先判断布尔表达式的结果: *true …

JAVA入门级教学之(do...while循环)

/* do...while: 1.do...while循环的语法结构: do{ 循环体; }while(布尔表达式); 2.do...while循环的执行原理: 3.do...while循环的执行次数: …

java 接口表单提交_Java http 调用接口提交表单以及文件

Java HttpURLConnection 使用/****/package com.demo.java;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnectio…

JAVA入门级教学之(break跳出)

/* 关于java控制语句中的break语句: 1.break是java语言中的关键字,被翻译为"中断/折断" 2.break";"可以成为一个单独完整的java语句; 3.break语句使用在switch语句中,用来终结swit…

java 文件通道_Java NIO(四)文件通道

文件通道通道是访问I/O服务的导管,I/O可以分为广义的两大类:File I/O和Stream I/O。那么相应的,通道也有两种类型,它们是文件(File)通道和套接字(Socket)通道。文件通道指的是FileChannel,套接字通道则有三个&#xff…

JAVA入门级教学之(continue)

/* continue语句: 1.continue表示:继续/下一个的意思 2.continue;也是一个continue关键字加一个分号构成一个单独的完整的java语句, 主要出现循环语句中用来控制循环的执行。 …

java算法实验标尺问题_在codeigniter项目中使用标尺库

我正在尝试将下面链接中可用的标尺库集成到我的codeigniter项目中 .我使用这些链接中给出的步骤安装和配置它 . 但仍然无法使用库中的方法 . 我尝试了库中的示例代码,但它不起作用 . 看起来Ruler库没有得到我的项目,因此方法没有解决 . 寻求帮助以实现这…

JAVA入门级教学之(方法-1)

目录 JAVA入门级教学之(方法-1) 1.以下程序不使用"方法",分析一下程序会存在哪些优缺点? 2.方法的本质:是一段代码片段,可以完成特定功能,可以重复利用 3.注意:方法定义在…

java设计模式初探之装饰者_JAVA设计模式初探之装饰者模式

装饰者模式1、意图: 动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。2、适用环境(1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责…

JAVA入门级教学之(方法-2)

/* 关于方法调用 -1.方法的修饰符列表中有static关键字,完整的调用方法是:类名.方法名(实参列表); -2.对于方法的修饰符列表中有static关键字的,"类名."可以省略不写 -3.对于在类外的方法调用,就必须使…

JAVA入门级教学之(方法-题-3)

/*分析以下程序的输出结果: *方法体内自上而下执行 *main方法开始main 方法结束*/public class method03 {public static void main(String[] args){System.out.println("main begin");m1();System.out.println("main over");}public static vo…

redis在java中的方法_redis在java中的使用方法

Redis是key-value方式储存数据的内存数据库。下载后解压,redis-server.exe是redis服务,启动之后就可以使用redis。redis-cli.exe是客户端,可以访问本地或远程的redis。redis-cli.exe -h 127.0.0.1 -p 6379 命令行命令。修改-h后的ip…

JAVA入门级教学之(方法-4)

/* 方法的返回值类型不是void的时候 1.要求方法必须保证百分百的执行"return 值;"这样的语句来完成值的返回 *没有这个语句编译器会报错 2.一个方法有返回值的时候,当我们调用这个方法的时候,方法返回了一个值&…

Java写一个快速排序_快速排序java实现

1.快速排序的思想快速排序属于交换排序,是冒泡排序的升降版。相对于冒泡排序而言,快速排序增大了记录比较和移动的距离,将关键字较大的记录直接移动到后面,将关键字较小的记录直接移动到前面;不再是相邻两个记录依次进…

JAVA入门级教学之(方法-调用-5)

/* 方法调用的时候实参和形参要求个数对应相同,数据类型对应相同 -类型不同的时候要求能够进行相应的自动类型转换 */ public class method05 {public static void main(String[] args){//编译错误,参数数量不对//method05.sum();//编译报…

JAVA实现命令助手_samples/简单语音编程,将手机打造成智能助手.md · javalovercn/HomeCenter - Gitee.com...

## 开发 语音小助手让我们用不到50行代码来开发一个跨平台语音生活助手(可运行于iPhone和Android),它会回答以下类似问题:1. “讲个笑话”,2. “什么是月季”,3. “今天北京到上海的火车”,4. “明天农历”&#xff0c…

JAVA入门级教学之(方法-6)

/* 深入return语句 *带有return关键字的java语句只要执行,所在的方法执行结束。 *在"同一个作用域"中,return语句下面不能编写任何代码,因为 这些代码永远执行不到。所以编译报错 */ public class method06…

java porm.xml_通过Maven仓库安装Spire.PDF for Java

本文将介绍如何通过Maven仓库安装Spire.PDF for Java。首先,在pom.xml文件中配置Maven仓库路径。com.e-icebluee-icebluehttp://repo.e-iceblue.com/nexus/content/groups/public/其次,在pom.xml文件中指定Spire.PDF for Java的Maven依赖e-iceblue spire…