图片验证码给AI使用
为了破解图形验证码,AI需要大量的图片数据。为了简单获取大量的图形来喂给Ai模型训练,索性自己写一把。代码来一发。。
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.image.BufferedImage;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.util.Random;
- import org.patchca.background.BackgroundFactory;
- import org.patchca.color.ColorFactory;
- import org.patchca.filter.predefined.CurvesRippleFilterFactory;
- import org.patchca.filter.predefined.DiffuseRippleFilterFactory;
- import org.patchca.filter.predefined.DoubleRippleFilterFactory;
- import org.patchca.filter.predefined.MarbleRippleFilterFactory;
- import org.patchca.filter.predefined.WobbleRippleFilterFactory;
- import org.patchca.font.RandomFontFactory;
- import org.patchca.service.ConfigurableCaptchaService;
- import org.patchca.text.renderer.BestFitTextRenderer;
- import org.patchca.utils.encoder.EncoderHelper;
- import org.patchca.word.RandomWordFactory;
- /**
- * 验证码工具
- */
- public class CaptchaUtils {
- private static Random random = new Random();
- private static ConfigurableCaptchaService ccs;
- private static WobbleRippleFilterFactory wrff; // 摆波纹
- private static DoubleRippleFilterFactory doff; // 双波纹
- private static CurvesRippleFilterFactory crff; // 曲线波纹
- private static DiffuseRippleFilterFactory drff; // 漫纹波
- private static MarbleRippleFilterFactory mrff; // 大理石
- private static void initialize(){
- if (ccs == null){
- synchronized (CaptchaUtils.class) {
- if (ccs == null){
- // 配置初始化
- ccs = new ConfigurableCaptchaService();
- // 设置图片大小
- ccs.setWidth(100);
- ccs.setHeight(28);
- // 设置文字数量
- RandomWordFactory wf = new RandomWordFactory();
- wf.setCharacters("ABDEFGHKMNRSWX2345689");
- wf.setMinLength(4);
- wf.setMaxLength(4);
- ccs.setWordFactory(wf);
- // 设置字体大小
- RandomFontFactory ff = new RandomFontFactory();
- ff.setMinSize(28);
- ff.setMaxSize(28);
- ccs.setFontFactory(ff);
- // 设置文字渲染边距
- BestFitTextRenderer tr = new BestFitTextRenderer();
- tr.setTopMargin(3);
- tr.setRightMargin(3);
- tr.setBottomMargin(3);
- tr.setLeftMargin(3);
- ccs.setTextRenderer(tr);
- // 设置字体颜色
- ccs.setColorFactory(new ColorFactory() {
- @Override
- public Color getColor(int x) {
- int r = random.nextInt(90);
- int g = random.nextInt(90);
- int b = random.nextInt(90);
- return new Color(r, g, b);
- }
- });
- // 设置背景
- ccs.setBackgroundFactory(new BackgroundFactory() {
- @Override
- public void fillBackground(BufferedImage image) {
- Graphics graphics = image.getGraphics();
- // 验证码图片的宽高
- int imgWidth = image.getWidth();
- int imgHeight = image.getHeight();
- // 填充为白色背景
- graphics.setColor(Color.WHITE);
- graphics.fillRect(0, 0, imgWidth, imgHeight);
- // 画 50 个噪点(颜色及位置随机)
- for (int i = 0; i < 50; i++) {
- // 随机颜色
- int rInt = random.nextInt(100)+50;
- int gInt = random.nextInt(100)+50;
- int bInt = random.nextInt(100)+50;
- graphics.setColor(new Color(rInt, gInt, bInt));
- // 随机位置
- int xInt = random.nextInt(imgWidth - 3);
- int yInt = random.nextInt(imgHeight - 2);
- // 随机旋转角度
- int sAngleInt = random.nextInt(360);
- int eAngleInt = random.nextInt(360);
- // 随机大小
- int wInt = random.nextInt(6);
- int hInt = random.nextInt(6);
- // 填充背景
- graphics.fillArc(xInt, yInt, wInt, hInt, sAngleInt, eAngleInt);
- // 画5条干扰线
- if (i % 10 == 0) {
- int xInt2 = random.nextInt(imgWidth);
- int yInt2 = random.nextInt(imgHeight);
- graphics.drawLine(xInt, yInt, xInt2, yInt2);
- }
- }
- }
- });
- // 效果初始化
- wrff = new WobbleRippleFilterFactory(); // 摆波纹
- doff = new DoubleRippleFilterFactory(); // 双波纹
- crff = new CurvesRippleFilterFactory(ccs.getColorFactory()); // 曲线波纹
- drff = new DiffuseRippleFilterFactory(); // 漫纹波
- mrff = new MarbleRippleFilterFactory(); // 大理石
- }
- }
- }
- }
- /**
- * 生成验证码
- * @param request
- * @param response
- * @throws IOException
- * @return 验证码字符
- */
- public static String generateCaptcha(OutputStream outputStream) throws IOException{
- // 初始化设置
- initialize();
- // 随机选择一个样式
- switch (random.nextInt(3)) {
- case 0:
- ccs.setFilterFactory(wrff); // 摆波纹
- break;
- case 1:
- ccs.setFilterFactory(doff); // 双波纹
- break;
- case 2:
- ccs.setFilterFactory(crff); // 曲线波纹
- break;
- case 3:
- ccs.setFilterFactory(drff); // 漫纹波
- break;
- case 4:
- ccs.setFilterFactory(mrff); // 大理石
- break;
- }
- // 生成验证码
- String s = EncoderHelper.getChallangeAndWriteImage(ccs, "png", outputStream);
- // System.out.println(s);
- return s;
- }
- public static void main(String[] args) throws IOException {
- FileOutputStream fos = new FileOutputStream("d:\\captcha.png");
- String s = generateCaptcha(fos);
- System.out.println(s);
- fos.close();
- }
- }
图片验证码给AI使用的更多相关文章
- 【python】带图片验证码的登录自动化实战
近期在跟进新项目的时候,整体的业务线非常之长,会一直重复登录退出不同账号的这个流程,所以想从登录开始实现部分的自动化.因为是B/S的架构,所以采用的是selenium的框架来实现.大致实现步骤如下: ...
- 字符型图片验证码识别完整过程及Python实现
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- android图片验证码--自绘控件
自绘控件的内容都是自己绘制出来的 大致流程如下: 1.定义一个类继承view 使用TypedArray初始化属性集合 在view的构造方法中 有一个AttributeSet的参数 很明显是用来保存控件 ...
- webform(十)——图片水印和图片验证码
两者都需要引入命名空间:using System.Drawing; 一.图片水印 前台Photoshuiyin.aspx代码: <div> <asp:FileUpload ID=&q ...
- Android-简单的图片验证码
Android-图片验证码生成1.为啥要验证码?图片验证码在网络中使用的是比较普遍的.一般都是用来防止恶意破解密码.刷票.论坛灌水.刷页等.2.怎样的验证码比较好?验证码的获取方式无非就两种,一种是后 ...
- 在mvc中实现图片验证码的刷新
首先,在项目模型(Model)层中建立一个生成图片验证码的类ValidationCodeHelper,代码如下: public class ValidationCodeHelper { //用户存取验 ...
- Webform 文件上传、 C#加图片水印 、 图片验证码
文件上传:要使用控件 - FileUpload 1.如何判断是否选中文件? FileUpload.FileName - 选中文件的文件名,如果长度不大于0,那么说明没选中任何文件 js - f.val ...
- php 图片验证码生成 前后台验证
自己从前一段时间做了个php小项目,关于生成图片验证码生成和后台的验证,把自己用到的东西总结一下,希望大家在用到相关问题的时候可以有一定的参考性. 首先,php验证码生成. 代码如下: 1.生成图像代 ...
- python 识别图片验证码报IOError
说一下困扰了我一周的问题:识别图片验证码 本来我按照安装步骤(http://www.cnblogs.com/yeayee/p/4955506.html?utm_source=tuicool&u ...
随机推荐
- Gym - 101334E 多叉树遍历
题意:给定一个字符串,求有多少种树与之对应,对应方式是,每次遍历左节点,没有了,就回溯: 分析:d[i,j] = sum(d[i+1,k-1],d[k,j]) (str[i]==str[k]); 坑点 ...
- POJ 1830 开关问题 【01矩阵 高斯消元】
任意门:http://poj.org/problem?id=1830 开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1 ...
- 剑指offer23 从上往下打印二叉树
没有把队列的头部弹出,出现内存错误:
- 【Linux-CentOS】【转-更正】使用CentOS DVD1 和DVD2做本地yum源
原文在此.此文写的非常好,怕网络丢失,特转来,并做了更正. CentOS6以上版本一般都会提供一个DVD1和一个DVD2镜像,使用DVD1即可安装使用CentOS了,DVD2中存放了一些额外的软件包, ...
- 创建VS工程使用神经网络库——FANN
编译: sourceforge上的FANN库带VS2010的工程,我机器上装的VS2005,用不了,愁人,只能手动创建工程了,编译不过,度娘不管用,FQ麻烦,用雅虎搜到一个工程的创建配置,调整配置试一 ...
- gcc扩展语法一:在表达式中的语句和声明
在GNU C中包含在括号中的复合语句可以作为一个表达式.这就允许你在表达式中使用循环,switch和局部变量. 以前复合语句是包含在大括号中语句序列.在这种构造中,圆括号包围在大括号中.如下面的例子: ...
- toad for sql server
数据库连接工具 toad for sql sever
- WKWebView进度及title
WKWebView进度及title WKWebView进度及title WKWebView 的estimatedProgress和title 都是KVO模式,所以可以添加监控: [webView ad ...
- excel导入到java/导出到excel
package com.test.order.config; import com.test.order.domain.HavalDO; import org.apache.poi.ss.usermo ...
- 节约内存:Instagram的Redis实践
Instagram可以说是网拍App的始祖级应用,也是当前最火热的拍照App之一,Instagram的照片数量已经达到3亿,而在Instagram里,我们需要知道每一张照片的作者是谁,下面就是Inst ...