java生成图片验证码

java生产图片验证码

1.第一步先引入架包
		<!--生成验证码-->
        <dependency>
            <groupId>com.github.axet</groupId>
            <artifactId>kaptcha</artifactId>
            <version>0.0.9</version>
        </dependency>
2.创建Bean并根据自己的需要进行配置
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;
@Configuration
public class KaptchaConfig {

    @Bean
    public DefaultKaptcha producer(){
        Properties p =new Properties();
        p.put("kaptcha.border","no");//是否有边框
        p.put("kaptcha.textproducer.font.color","black");//字体颜色
        p.put("kaptcha.image.width","135");//图片宽度
        p.put("kaptcha.textproducer.char.string","ABCDEFHKIJZPYZPRSTWX123456789");//使用哪些字符生成验证码
        p.put("kaptcha.image.height","50");//图片高度
        p.put("kaptcha.textproducer.font.size","43");//字体大小
        p.put("kaptcha.noise.color","blue");//字体颜色
        p.put("kaptcha.textproducer.char.length","5");//字符的个数
        p.put("kaptcha.textproducer.font.names","Arial");//字体
        Config config =new Config(p);
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

Kaptcha 详细配置表,可根据需要配置。

Constant描述默认值
kaptcha.border图片边框,合法值:yes , noyes
kaptcha.border.color边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blueblack
kaptcha.image.width图片宽200
kaptcha.image.height图片高50
kaptcha.producer.impl图片实现类com.google.code.kaptcha.impl.DefaultKaptcha
kaptcha.textproducer.impl文本实现类com.google.code.kaptcha.text.impl.DefaultTextCreator
kaptcha.textproducer.char.string文本集合,验证码值从此集合中获取abcde2345678gfynmnpwx
kaptcha.textproducer.char.length验证码长度5
kaptcha.textproducer.font.names字体Arial, Courier
kaptcha.textproducer.font.size字体大小40px
kaptcha.textproducer.font.color字体颜色,合法值: r,g,b 或者 white,black,blueblack
kaptcha.textproducer.char.space文字间隔2
kaptcha.noise.impl干扰实现类com.google.code.kaptcha.impl.DefaultNoise
kaptcha.noise.color干扰 颜色,合法值: r,g,b 或者 white,black,blueblack
kaptcha.obscurificator.impl图片样式:
水纹 com.google.code.kaptcha.impl.WaterRipple
鱼眼 com.google.code.kaptcha.impl.FishEyeGimpy
阴影 com.google.code.kaptcha.impl.ShadowGimpy
com.google.code.kaptcha.impl.WaterRipple
kaptcha.background.impl背景实现类com.google.code.kaptcha.impl.DefaultBackground
kaptcha.background.clear.from背景颜色渐变,开始颜色light grey
kaptcha.background.clear.to背景颜色渐变, 结束颜色white
kaptcha.word.impl文字渲染器com.google.code.kaptcha.text.impl.DefaultWordRenderer
kaptcha.session.keysession keyKAPTCHA_SESSION_KEY
kaptcha.session.datesession dateKAPTCHA_SESSION_DATE
3.Controller 层的关键代码,在浏览器直接请求就可以看到了。
	@Autowired
    private Producer producer;
    
    @ApiOperation(value = "生成验证码")
    @GetMapping("getCode")
    public void getCode(HttpServletResponse response) throws IOException {
        //生产验证码
        String text = producer.createText();
        //生产图片验证码
        BufferedImage img = producer.createImage(text);
        ServletOutputStream outputStream = response.getOutputStream();
        ImageIO.write(img,"jpg",outputStream);

        System.out.println("---------------"+text);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java生成图片验证码的步骤如下: 1. 创建一个 BufferedImage 对象,指定宽度、高度和图片类型(如 BufferedImage.TYPE_INT_RGB)。 2. 获取 BufferedImage 对象的 Graphics2D 对象,用于绘制验证码。 3. 设置验证码的背景色和边框颜色。 4. 生成随机验证码字符串,并将其绘制到图片上。 5. 绘制干扰线和噪点,增加验证码的可读性和安全性。 6. 将 BufferedImage 对象输出为图片文件或输出流。 以下是一个简单的示例代码: ``` import java.awt.*; import java.awt.image.BufferedImage; import java.util.Random; public class CaptchaGenerator { private static final int WIDTH = 120; // 图片宽度 private static final int HEIGHT = 40; // 图片高度 private static final int CODE_LENGTH = 4; // 验证码长度 private static final int LINE_COUNT = 10; // 干扰线数量 private static final int NOISE_COUNT = 100; // 噪点数量 public static BufferedImage generate() { BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics2D g = (Graphics2D) image.getGraphics(); // 设置背景色和边框颜色 g.setColor(Color.WHITE); g.fillRect(0, 0, WIDTH, HEIGHT); g.setColor(Color.BLACK); g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1); // 生成随机验证码字符串,并绘制到图片上 Random random = new Random(); StringBuilder code = new StringBuilder(CODE_LENGTH); for (int i = 0; i < CODE_LENGTH; i++) { char ch = (char) (random.nextInt(26) + 'A'); code.append(ch); g.drawString(String.valueOf(ch), (i + 1) * (WIDTH / (CODE_LENGTH + 1)), HEIGHT / 2); } // 绘制干扰线和噪点 for (int i = 0; i < LINE_COUNT; i++) { g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256))); g.drawLine(random.nextInt(WIDTH), random.nextInt(HEIGHT), random.nextInt(WIDTH), random.nextInt(HEIGHT)); } for (int i = 0; i < NOISE_COUNT; i++) { g.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256))); g.fillRect(random.nextInt(WIDTH), random.nextInt(HEIGHT), 1, 1); } g.dispose(); return image; } } ``` 可以调用 `generate()` 方法生成一个 BufferedImage 对象,然后将其保存为文件或输出流。例如,将图片保存到文件的代码如下: ``` BufferedImage image = CaptchaGenerator.generate(); ImageIO.write(image, "PNG", new File("captcha.png")); ``` 或者将图片以流的形式输出到客户端: ``` BufferedImage image = CaptchaGenerator.generate(); response.setContentType("image/png"); ImageIO.write(image, "PNG", response.getOutputStream()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值