import java.awt.Color;
import java.awt.Font;
import java.awt.image.ImageFilter;
import com.jhlabs.image.WaterFilter;
import com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator;
import com.octo.captcha.component.image.backgroundgenerator.FunkyBackgroundGenerator;
import com.octo.captcha.component.image.backgroundgenerator.GradientBackgroundGenerator;
import com.octo.captcha.component.image.color.RandomRangeColorGenerator;
import com.octo.captcha.component.image.deformation.ImageDeformation;
import com.octo.captcha.component.image.deformation.ImageDeformationByFilters;
import com.octo.captcha.component.image.fontgenerator.FontGenerator;
import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
import com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster;
import com.octo.captcha.component.image.textpaster.TextPaster;
import com.octo.captcha.component.image.textpaster.textdecorator.BaffleTextDecorator;
import com.octo.captcha.component.image.textpaster.textdecorator.LineTextDecorator;
import com.octo.captcha.component.image.textpaster.textdecorator.TextDecorator;
import com.octo.captcha.component.image.wordtoimage.DeformedComposedWordToImage;
import com.octo.captcha.component.image.wordtoimage.WordToImage;
import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;
import com.octo.captcha.component.word.wordgenerator.WordGenerator;
import com.octo.captcha.engine.image.gimpy.DefaultGimpyEngine;
import com.octo.captcha.image.gimpy.GimpyFactory;
public class ImageCodeEngine extends DefaultGimpyEngine {
private static final String CODE = "一二三四五六七字符显示的个数";// I、0去掉"一二三四五六七字符显示的个数"
// 字符显示的个数
private static final Integer MIN_WORD_LEN = new Integer(4);
// 字符显示的个数
private static final Integer MAX_WORD_LEN = new Integer(4);
// 验证码图片的高度宽度设定
private static final Integer IMAGE_WIDTH = new Integer(100);
private static final Integer IMAGE_HEIGHT = new Integer(40);
// 验证码中显示的字体大小
private static final Integer MIN_FONT_SIZE = new Integer(24);
private static final Integer MAX_FONT_SIZE = new Integer(26);
protected void buildInitialFactories() {
WordGenerator wordGenerator = new RandomWordGenerator(CODE);
BackgroundGenerator backgroundGenerator = new GradientBackgroundGenerator(
IMAGE_WIDTH, IMAGE_HEIGHT, Color.white, Color.white);
// 字体格式
Font[] fontsList = new Font[]{Font.decode("Arial"),Font.decode("Tahoma"),Font.decode("Verdana")};
fontsList = new Font[]{Font.decode("华文细黑")};//可以使用中文验证码,另外汉字宽度比较大,要重新调整一下字体大小,不然会出现异常
// 字体随机生成
FontGenerator fontGenerator = new RandomFontGenerator(MIN_FONT_SIZE,MAX_FONT_SIZE,fontsList);
// 背景颜色随机生成
// 验证码的颜色-使用随机颜色器new Integer[]{0,100},new Integer[]{0,100}, new
// Integer[]{0,100}
RandomRangeColorGenerator cgen = new RandomRangeColorGenerator(
new int[] { 0, 150 }, new int[] { 0, 150 },
new int[] { 0, 150 });
backgroundGenerator = new FunkyBackgroundGenerator(IMAGE_WIDTH, IMAGE_HEIGHT);
//文字干扰器--- 可以创建多个
BaffleTextDecorator baffleTextDecorator = new BaffleTextDecorator(2,cgen);//气泡干扰
LineTextDecorator lineTextDecorator = new LineTextDecorator(1,cgen);//曲线干扰
TextDecorator[] textDecorators = new TextDecorator[0];
//textDecorators[0] = baffleTextDecorator;
//textDecorators[0] = lineTextDecorator;
TextPaster textPaster = new DecoratedRandomTextPaster(MIN_WORD_LEN,MAX_WORD_LEN, cgen,true, new TextDecorator[] { new BaffleTextDecorator(new Integer(1), Color.WHITE) });
//过滤器
WaterFilter water = new WaterFilter();
water.setAmplitude(4d);//振幅
water.setAntialias(true);//显示字会出现锯齿状,true就是平滑的
//water.setPhase(30d);//月亮的盈亏
water.setWavelength(60d);//
ImageDeformation backDef = new ImageDeformationByFilters(
new ImageFilter[]{});
ImageDeformation textDef = new ImageDeformationByFilters(
new ImageFilter[]{});
ImageDeformation postDef = new ImageDeformationByFilters(
new ImageFilter[]{water});
// 生成图片输出
// WordToImage wordToImage = new ComposedWordToImage(fontGenerator,
// backgroundGenerator, textPaster);
// addFactory(new GimpyFactory(wordGenerator, wordToImage));
WordToImage word2image = new DeformedComposedWordToImage(fontGenerator, backgroundGenerator, textPaster,
backDef,
textDef,
postDef
);
addFactory(new GimpyFactory(wordGenerator, word2image));
}
}
分享到:
相关推荐
首先,JCaptcha 是一个开源的 Java 验证码库,它提供了丰富的定制选项,包括自定义干扰线和背景图片,以增加验证码的复杂性,从而降低被机器识别的可能性。以下是一些关键知识点: 1. **安装 JCaptcha**:在项目中...
3. **可扩展性**:JCAPTCHA 的设计允许开发者通过插件机制添加自定义的验证码生成器和验证策略,满足特定需求。 4. **多语言支持**:语音验证码可以支持多种语言,包括但不限于英语、中文等,使得全球用户都能方便地...
- **绘制验证码**:可以使用Java的Graphics类或者第三方库(如JCaptcha)来绘制验证码图像,包括字符、背景、干扰线等元素。 - **存储与验证**:生成的验证码字符串要存储在服务器端,当用户输入后,服务器会比对...
3. **图像处理**:为了增加验证码的复杂性,通常会扭曲、旋转、添加噪点或干扰线到验证码图片中。这需要使用到Java的图像处理库,如`java.awt.image.BufferedImage`和`java.awt.Graphics2D`,通过这些API可以绘制...
在Web应用中,验证码通常需要用户在提交表单前输入图像上显示的一串随机字符,以此验证用户是真人而非计算机程序。以下是一些关于验证码生成类的关键知识点: 1. **验证码类型**: - 图像验证码:最常见的一种形式...
为了增加安全性,我们通常会扭曲文本,改变颜色,添加噪声点,以及在文本下方画一条干扰线。 3. **保存验证码**:生成验证码后,我们需要将其保存到服务器的某个地方,例如内存或者数据库中。同时,我们需要将...
6. **噪点和干扰线**:在验证码图像上添加噪点和干扰线可以进一步增加机器识别的难度。这可以通过随机画点和线来实现。 7. **保存和显示图像**:生成的图像可以用`ImageIO.write()`方法保存为PNG或JPEG格式,然后在...
我们可以设置字体、颜色、背景以及干扰线等元素,使图像看起来更难以被机器自动识别。`CheckCode_Shijin`可能包含一个用于绘制验证码的类或方法。 3. **存储验证码**:生成的验证码字符串需要暂时存储在服务器端,...
最常见的可能就是图形验证码,它通常由一串随机字符组成,显示在一个扭曲或带有干扰线的图片上,用户需要正确输入图片上的字符才能通过验证。 实现图形验证码的关键步骤包括: 1. **生成随机验证码**:可以使用...
- 随机扭曲、变形、填充背景、添加干扰线等,以增加机器识别的难度。 3. **输出图像到JSP页面**: - 在JSP页面中,通过`<img>`标签展示验证码图片。图片的`src`属性应指向一个Servlet,该Servlet负责生成并返回...
你可以使用`BufferedImage`类来创建一个新的图像,然后使用`Graphics2D`来绘制文字和干扰线。 2. **随机数生成**:为了生成随机的验证码文本,你需要使用`java.util.Random`类来生成数字或字母。你可以设定验证码的...
1. **图像验证码**:最常见的验证码类型,它显示一个随机生成的文本,用户需要输入他们看到的字符。Struts2的`.struts2-jcaptcha-plugin`插件可以用来实现这一功能。首先,需要在项目中引入这个插件的依赖,然后配置...
3. 干扰元素:为了增加识别难度,验证码图片通常会添加背景噪音、干扰线、扭曲、旋转等效果。这可以通过在画布上随机绘制线条、斑点或者对字符进行扭曲处理实现。 4. 保存与验证:生成的验证码图片会被显示给用户,...
在`doGet()`方法中,实际的验证码生成过程包括创建`BufferedImage`对象,填充背景色,绘制随机字符串,添加干扰线,最后使用`ImageIO.write()`方法将图片写入响应流,发送给客户端。 7. **保存验证码**: 在生成...
`JCaptcha`的工作原理主要是通过生成随机的字符串或数字,然后将它们转化为图像或音频的形式,再添加各种扭曲、噪声等干扰元素,使得人类用户可以轻松识别,而机器难以解析。这样可以有效防止自动化程序的攻击。 在...
验证码(CAPTCHA)是一种用于区分人类与机器的自动程序,它是Challenge-Response Test的缩写,中文名为全自动区分计算机和人类的图灵测试。在网络安全领域,验证码被广泛应用于防止恶意自动化程序,如机器人,进行...
3. 绘制验证码:创建`BufferedImage`对象,使用`Graphics2D`绘制随机字符串,可以设置字体、颜色、倾斜角度等属性,增加干扰线或点以提高安全性。 4. 编码并输出图像:使用`ImageIO.write()`方法将图像编码为JPEG或...
- 噪声添加:在图像上添加随机像素点或线条,干扰自动识别。 - 验证码服务:后端服务接收用户输入,比对是否一致。 2. 动态验证码:这类验证码会随着时间或者用户行为改变,增加了破解的复杂性。例如滑动验证码,...
- 添加噪声:在验证码图像上添加随机噪声,干扰自动识别。 - 考虑无障碍性:为视觉障碍用户提供声音验证码或其它替代方案。 在实际开发中,还可以使用现成的验证码库,如`JCaptcha`或`Google's reCAPTCHA`,它们...
通过随机生成字符、设置字体、颜色、背景等属性,我们可以构建具有扰动线、噪声点等干扰元素的图像,增加机器识别的难度。 3. JCaptcha库: JCaptcha是一个流行的Java验证码库,它提供了一套完整的解决方案,包括...