package com.sm.sapp.tiles.impl;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.util.Random;
import org.springframework.stereotype.Component;
import com.sm.sapp.tiles.interfaces.IIdentifyingCode;
/**
* 验证码图片生成器
*
*/
@Component
public class IdentifyingCode implements IIdentifyingCode {
// 验证码图片的宽度。
private int width = 72;
// 验证码图片的高度。
private int height = 24;
// 验证码字符个数。
private int count = 4;
// 干扰点数量
private int pntsCount = 120;
// 干扰线数量
private int linesCount = 15;
private Random random = new Random();
public IdentifyingCode() {}
public BufferedImage drawIdentifyingCode(String code) {
BufferedImage image = new BufferedImage(this.getWidth(),
this.getHeight(), BufferedImage.TYPE_INT_BGR);
Graphics2D g = image.createGraphics();
// 绘制背景
g.setColor(this.getRandomColor(180, 200));
g.fillRect(0, 0, this.getWidth(), this.getHeight());
// 绘制干扰图形
this.drawRandomShapes(g,linesCount,(int)(pntsCount*0.75));
// 绘制验证码文本
Font myFont = new Font("Georgia", Font.BOLD, 16); // Arial Courier New Verdana
int len = code.length();
g.setFont(myFont);
for(int i=0;i<len;i++){
String chr = code.charAt(i)+"";
Color color = new Color(20 + random.nextInt(50),20 + random.nextInt(50), 20 + random.nextInt(50));
g.setColor(color);
// 文字旋转
AffineTransform trans = new AffineTransform();
trans.rotate(random.nextInt(45) * Math.PI / 180, 15 * i + 8, 7);
// 缩放文字
float scaleSize = random.nextFloat() + 0.8f;
if (scaleSize > 1f) scaleSize = 1f;
trans.scale(scaleSize, scaleSize);
g.setTransform(trans);
g.drawString(chr, 16 * i + 10, 14);
}
// 在图片最上层绘制干扰图形
this.drawRandomShapes(g,4,(int)(pntsCount*0.75));
g.dispose();
return image;
}
public String generateIdentifyingCode(int length) {
if(length<0){
length = this.count;
}
StringBuffer strbuf = new StringBuffer();
String str = "";
int itmp = 0;
for (int i = 0; i < length; i++) {
switch (random.nextInt(2)) {
case 1: // 生成A~Z的字母
itmp = random.nextInt(26) + 65;
str = String.valueOf((char) itmp);
break;
case 2: // 生成a~a的字母
itmp = random.nextInt(26) + 97;
str = String.valueOf((char) itmp);
default:
itmp = random.nextInt(10) + 48;
str = String.valueOf((char) itmp);
break;
}
strbuf.append(str);
}
return strbuf.toString();
}
/**
* 绘制干扰图形
*
* @param g
* Graphics2D对象,用来绘制图像
*
*/
private void drawRandomShapes(Graphics2D g,int ls, int ps) {
// 绘制干扰线
int i = 0;
for (i = 0; i < ls; i++) {
g.setColor(this.getRandomColor(160, 200));
int x1 = random.nextInt(width);
int y1 = random.nextInt(height);
int x2 = random.nextInt(width);
int y2 = random.nextInt(height);
g.drawLine(x1, y1, x2, y2);
}
// 绘制干扰点
for (i = 0; i < ps; i++) {
g.setColor(this.getRandomColor(160, 200));
int x1 = random.nextInt(width);
int y1 = random.nextInt(height);
g.drawLine(x1,y1,x1,y1);
}
}
/**
* 生成随机颜色
*
* @param fc
* 前景色
* @param bc
* 背景色
* @return Color对象,RGB。
*/
private Color getRandomColor(int fc, int bc) {
if (fc > 255)
fc = 200;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getPntsCount() {
return pntsCount;
}
public void setPntsCount(int pntsCount) {
this.pntsCount = pntsCount;
}
public int getLinesCount() {
return linesCount;
}
public void setLinesCount(int linesCount) {
this.linesCount = linesCount;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
应网友要求,重新整理原《eclipse + maven多模块项目框架 + jetty热部署的实例源码》,增加了各配置的详细注释。 并且基于Spring MVC提供了一个完整功能:实现了生成验证码图片,以及验证输入是否匹配的两个接口,接口为Rest风格,符合内容协商原则(同一资源,多种展现:xml,json,html)。 另外,演示了注解(Annotation)的用法,实现业务bean的零配置。 have fun !
资源推荐
资源详情
资源评论






格式:zip 资源大小:77.5KB























收起资源包目录

































































































































共 52 条
- 1

gollon
- 粉丝: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 著名地产建筑工程质量管理手册.doc
- 微信小程序入门开发.zip
- BIM工程管理平台ppt.pptx
- 广州某超高层住宅施工进度保证措施.doc
- 巡检员岗位职责HN-GWZZ-PK-2.doc
- 混流式水轮机结构及发电原理.ppt
- 商业楼机电分包工程招标文件.doc
- 店铺权重设计.pptx
- 线路敷设方式代号.doc
- 中建钢构装配式钢结构住宅介绍自制2.pptx
- 微信小程序 外卖(1).zip
- 上海大酒店暖通空调设计.pdf
- 微信(weixin_wechat) Python SDK 支持开放平台和公众平台 支持微信小程序云开发.zip
- 超高层商务楼大体积混凝土施工方案1.docx
- 三板溪水电站导流洞洞身初期支护设计qc.doc
- 荣成皓程国际广场勘察报告正文.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
- 3
- 4
前往页