package image.images;

import java.io.File;
import java.io.IOException;
import java.io.InputStream; import org.apache.commons.io.FileUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
/**
* 负责爬去验证码图片
* @author FMm
*
*/
public class HttpClientImage { public static void main(String[] args) throws ClientProtocolException, IOException, InterruptedException {
// 创建httpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
// url
String url = "http://con.monyun.cn:9960/aut_checkCode.hts?iden=1422083454409442236&t=0.06292891333169814";
// 循环爬去20张验证码
for (int i = 0; i < 20; i++) {
// 休眠一下否则图片加载不出来,
Thread.sleep(2000);
// 创建请求
HttpGet httpGet = new HttpGet(url);
// 执行请求
CloseableHttpResponse response = httpClient.execute(httpGet);
// 获取实体对象
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
// 打印返回类型保证是图片类型
System.out.println("Content-Type:" + httpEntity.getContentType().getValue());
// 获取InputStream流
InputStream inputStream = httpEntity.getContent();
// 文件复制,common io 包下,需要 引入依赖
FileUtils.copyToFile(inputStream, new File("/Users/mac/Desktop/image/" + i + ".png"));
}
}
httpClient.close();
}
}
package image.images;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.net.ssl.HttpsURLConnection;
/**
* 图片背景处理,提高识别度
* @author FMm
*
*/
public class ImageConverter { private static List<File> fileList = new ArrayList<File>(); public static void main(String[] args) { // 图片所在的根目录 , 图片去除水印后的存储目录
// 支持批量去除图片水印,第一个参数为图片存在目录,第二为新建图片目录
convertAllImages("/Users/mac/Desktop/image/", "/Users/mac/Desktop/images/");
} private static void convertAllImages(String dir, String saveDir) {
File dirFile = new File(dir);
File saveDirFile = new File(saveDir);
dir = dirFile.getAbsolutePath();
saveDir = saveDirFile.getAbsolutePath();
loadImages(new File(dir));
for (File file : fileList) {
String filePath = file.getAbsolutePath(); String dstPath = saveDir + filePath.substring(filePath.indexOf(dir) + dir.length(), filePath.length());
System.out.println("converting: " + filePath);
replaceColor(file.getAbsolutePath(), dstPath);
}
} public static void loadImages(File f) {
if (f != null) {
if (f.isDirectory()) {
File[] fileArray = f.listFiles();
if (fileArray != null) {
for (int i = 0; i < fileArray.length; i++) {
loadImages(fileArray[i]);
}
}
} else {
String name = f.getName();
if (name.endsWith("png") || name.endsWith("jpg")) {
fileList.add(f);
}
}
}
} @SuppressWarnings("unused")
private static void replaceFolderImages(String dir) {
File dirFile = new File(dir);
File[] files = dirFile.listFiles(new FileFilter() {
public boolean accept(File file) {
String name = file.getName();
if (name.endsWith("png") || name.endsWith("jpg")) {
return true;
}
return false;
}
});
for (File img : files) {
replaceColor(img.getAbsolutePath(), img.getAbsolutePath());
}
} private static void replaceColor(String srcFile, String dstFile) {
try {
Color color = new Color(255, 195, 195);
replaceImageColor(srcFile, dstFile, color, Color.WHITE);
} catch (IOException e) {
e.printStackTrace();
}
} public static void replaceImageColor(String file, String dstFile, Color srcColor, Color targetColor)
throws IOException {
URL http;
if (file.trim().startsWith("https")) {
http = new URL(file);
HttpsURLConnection conn = (HttpsURLConnection) http.openConnection();
conn.setRequestMethod("GET");
} else if (file.trim().startsWith("http")) {
http = new URL(file);
HttpURLConnection conn = (HttpURLConnection) http.openConnection();
conn.setRequestMethod("GET");
} else {
http = new File(file).toURI().toURL();
}
BufferedImage bi = ImageIO.read(http.openStream());
if (bi == null) {
return;
} Color wColor = new Color(255, 255, 255);// 白色 for (int i = 0; i < bi.getWidth(); i++) {
for (int j = 0; j < bi.getHeight(); j++) {
System.out.println(i + "---" + j);
int color = bi.getRGB(i, j);
Color oriColor = new Color(color);
int red = oriColor.getRed();
int greed = oriColor.getGreen();
int blue = oriColor.getBlue();
// 以下if处是则改变图片颜色 将图片背景改变成纯白色,提高识别度
if (i < 4 | i > 100) {
bi.setRGB(i, j, wColor.getRGB());
//bi.setRGB()方法是把对应的xy坐标的颜色改变成纯白色Color wColor = new Color(255, 255, 255);// 白色
} if (j < 4 | j > 35) {
bi.setRGB(i, j, wColor.getRGB());
} if (red < 107 && greed < 107 && blue < 107) {
bi.setRGB(i, j, wColor.getRGB()); }
if ((red <= 255 && red > 200) & (greed <= 255 && greed >= 200) & blue <= 255 && blue >= 200) {
bi.setRGB(i, j, wColor.getRGB());
}
}
}
String type = file.substring(file.lastIndexOf(".") + 1, file.length());
Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName(type);
ImageWriter writer = it.next();
File f = new File(dstFile);
f.getParentFile().mkdirs();
ImageOutputStream ios = ImageIO.createImageOutputStream(f);
writer.setOutput(ios);
writer.write(bi);
bi.flush();
ios.flush();
ios.close();
}
}
package image.images;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
/**
* 读取验证码并返回结构
* @author FMm
*
*/
public class ReadImage { public static void main(String[] args) throws TesseractException {
ITesseract instance = new Tesseract();
//如果未将tessdata放在根目录下需要指定绝对路径,tessdata包下是tess4j训练语言包
instance.setDatapath("/Users/mac/Desktop/tessdata");
//如果需要识别英文之外的语种,需要指定识别语种,并且需要将对应的语言包放进项目中
instance.setLanguage("eng");
// 指定识别图片路径
File imgDir = new File("/Users/mac/Desktop/images/8.png");
long startTime = System.currentTimeMillis();
String ocrResult = instance.doOCR(imgDir);
System.out.println(ocrResult);
if(isStartWithNumber(ocrResult)) {
String start = ocrResult.substring(0,1);
String meg = ocrResult.substring(1,2);
String end = ocrResult.substring(2,3);
// 输出识别结果
System.out.println("OCR Result: \n" + ocrResult + "\n 耗时:" + (System.currentTimeMillis() - startTime) + "ms");
// 得出结果
System.out.println(start+meg+end+"="+(Integer.parseInt(start)+Integer.parseInt(end)));
} else {
System.out.println("仅支持数字");
return;
} } public static boolean isStartWithNumber(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str.charAt(0)+"");
if (!isNum.matches()) {
return false;
}
return true;
}
}
maven文件
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>image</groupId>
<artifactId>images</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>images</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.8</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.4.1</version>
</dependency>
</dependencies>
</project>
不是maven项目所需jar

p.p1 { margin: 0; font: 12px Menlo; color: rgba(66, 66, 66, 1) }

org/apache/httpcomponents/httpclient/4.5.8/httpclient-4.5.8.jar

org/apache/httpcomponents/httpcore/4.4.11/httpcore-4.4.11.jar

commons-logging/commons-logging/1.2/commons-logging-1.2.jar

commons-codec/commons-codec/1.11/commons-codec-1.11.jar

org/jsoup/jsoup/1.12.1/jsoup-1.12.1.jar

commons-io/commons-io/2.5/commons-io-2.5.jar

com/alibaba/fastjson/1.2.47/fastjson-1.2.47.jar

junit/junit/3.8.1/junit-3.8.1.jar

net/sourceforge/tess4j/tess4j/4.4.1/tess4j-4.4.1.jar

net/java/dev/jna/jna/5.4.0/jna-5.4.0.jar

com/github/jai-imageio/jai-imageio-core/1.4.0/jai-imageio-core-1.4.0.jar

org/ghost4j/ghost4j/1.0.1/ghost4j-1.0.1.jar

log4j/log4j/1.2.17/log4j-1.2.17.jar

commons-beanutils/commons-beanutils/1.9.2/commons-beanutils-1.9.2.jar

commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar

org/apache/xmlgraphics/xmlgraphics-commons/1.4/xmlgraphics-commons-1.4.jar

com/lowagie/itext/2.1.7/itext-2.1.7.jar

org/apache/pdfbox/pdfbox/2.0.17/pdfbox-2.0.17.jar

org/apache/pdfbox/fontbox/2.0.17/fontbox-2.0.17.jar

org/apache/pdfbox/pdfbox-tools/2.0.17/pdfbox-tools-2.0.17.jar

org/apache/pdfbox/pdfbox-debugger/2.0.17/pdfbox-debugger-2.0.17.jar

org/apache/pdfbox/jbig2-imageio/3.0.2/jbig2-imageio-3.0.2.jar

net/sourceforge/lept4j/lept4j/1.12.3/lept4j-1.12.3.jar

org/jboss/jboss-vfs/3.2.14.Final/jboss-vfs-3.2.14.Final.jar

org/jboss/logging/jboss-logging/3.1.4.GA/jboss-logging-3.1.4.GA.jar

ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar

ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar

org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar

org/slf4j/jul-to-slf4j/1.7.28/jul-to-slf4j-1.7.28.jar

org/slf4j/jcl-over-slf4j/1.7.28/jcl-over-slf4j-1.7.28.jar

org/slf4j/log4j-over-slf4j/1.7.28/log4j-over-slf4j-1.7.28.jar

所需的tess4j文件,文件名称:tessdata/,这个文件你可以放在项目中,也可以放在其他位置但是路径不能写错

tessdata/
chi_sim.traineddata // 中文识别
eng.traineddata //数字识别 下载地址https://raw.githubusercontent.com/tesseract-ocr/tessdata/master/eng.traineddata
osd.traineddata
pdf.ttf
pdf.ttx
readme

tess4j官网文件下载:https://sourceforge.net/projects/tess4j/

破解网站码验证,Java实现,不调用任何平台api接口的更多相关文章

  1. 破解网站二维码验证,Java实现,不调用任何平台api接口

    package image.images; import java.io.File; import java.io.IOException; import java.io.InputStream; i ...

  2. Java对接拼多多开放平台API(加密上云等全流程)

    前言 本文为[小小赫下士 blog]原创,搬运请保留本段,或请在醒目位置设置原文地址和原作者. 作者:小小赫下士 原文地址:Java对接拼多多开放平台API(加密上云等全流程) 本文章为企业ERP(I ...

  3. Java生鲜电商平台-API接口设计之token、timestamp、sign 具体架构与实现(APP/小程序,传输安全)

    Java生鲜电商平台-API接口设计之token.timestamp.sign 具体设计与实现 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃 ...

  4. json-lib-2.4-jdk15.jar所需全部JAR包.rar java jsoup解析开彩网api接口json数据实例

    json-lib-2.4-jdk15.jar所需全部JAR包.rar  java jsoup解析开彩网api接口json数据实例 json-lib-2.4-jdk15.jar所需全部JAR包.rar  ...

  5. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  6. Angular 调用百度地图API接口

    Angular 调用百度地图API接口 参考原文:https://blog.csdn.net/yuyinghua0302/article/details/80624274 下面简单介绍一下如何在Ang ...

  7. java EE技术体系——CLF平台API开发注意事项(4)——API生命周期治理简单说明

    文档说明 截止日期:20170905,作者:何红霞,联系方式:QQ1028335395.邮箱:hehongxia626@163.com 综述 有幸加入到javaEE技术体系的研究与开发,也得益于大家的 ...

  8. Python如何调用新浪api接口的问题

    前言:这些天在研究如何调用新浪开放平台的api分析新浪微博用户的数据 成果:成功调用了新浪api获取了用户的一些个人信息和无数条公共微博 不足:新浪开放平台访问有限制,返回的数据着实有限,不足以分析问 ...

  9. Java生鲜电商平台-API接口设计之token、timestamp、sign 具体设计与实现

    转载:https://www.cnblogs.com/jurendage/p/12653865.html 说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安 ...

随机推荐

  1. 「csp-s模拟测试(9.18)」Set·Read·Race

    昨天考试考得有点迷??? 一看内存限制,T1 64MB T2 16MB 当场懵比......... T1 set 考场打的背包问题和随机化,其实能randA掉,但不小心数组开小了????(长记性!!! ...

  2. 【题解】Luogu p3047 [USACO12FEB]附近的牛Nearby Cows 树型dp

    题目描述 Farmer John has noticed that his cows often move between nearby fields. Taking this into accoun ...

  3. 有模有样解决Flutter里Webview无法访问HTTP页面的问题

    探索过程 Android9(好像是吧)开始谷歌就默认不让开发者访问不安全HTTP内容了,如果非要用HTTP,那必须在networkSecurityConfig里配置cleartextTrafficPe ...

  4. 【odoo14】【开发侧】权限配置

    欢迎转载,但需标注出处,谢谢! 说明: 本文面向开发人员,普通用户可参考[odoo14][用户侧]权限配置.文章结构与用户侧一致. 目录 一. odoo中的对象 二. 权限控制 2.1 实现原理 2. ...

  5. 痛并快乐的YOLO初体验

    1.前言 最近因为需要研究视频的物体识别和行为识别,上网了解了一下,YOLO是目前实时视频物体识别的应用最广泛的算法. 因此,作为小白的我,也准备体验一下YOLO算法的效果. 先上网了解了一下YOLO ...

  6. JWT原理实现代码

    JWT学习文章: 第一篇:JWT原理 第二篇:JWT原理实现代码 上一篇学习了JWT的基本理论,这一篇将根据原理进行代码实现. 要想实现jwt的加密解密,要先生成一个SecurityKey,大家可以在 ...

  7. 通过busybox制作根文件系统详细过程

    我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已.而使用busybox制作根文件系统可以自 ...

  8. 7、Oracle通过客户端(sqlplus)登录认证用户的方式

    select version from v$instance; #查看当前数据库的版本 192.168.31.5:1521/orcl 7.1.操作系统认证: 1.Oracle认为操作系统用户是可靠的, ...

  9. 使用VS2017开发APP中使用VUE.js开发遇到打包出来的android文件 在低版本的android(4.3)中无法正常使用

    使用VS2017开发VUE的APP应用遇到的问题集合 1,  打包出来的apk文件在Android 6.0版本以上手机可以正常打开,在Android 4.3版本手机上无法打开 原因:一开始猜测是不是V ...

  10. 关于TreeView的实例

    前台代码 (只需要有TreeView控件, 添加ID,其他默认生成) <form id="form1" runat="server"> <di ...