`
Tristan_S
  • 浏览: 366999 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

解析图片验证码

阅读更多
1, 生成图片请参照 http://tristan-s.iteye.com/admin/blogs/1026307

2, 目前只能解析没有干扰素的数字图片。 例如:

OK卡网站的验证码

去除干扰素,可以用以下算法
a> 线条的: 检查该线条是否是贯通的直线条,如是则去掉
b> 点: 检查该点是否是孤立的,如是则去掉

3, 需要将图片中的数字用0,1的形式来表达。解析每个数字,见附件

4, 代码
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

public class ImageDemo {
	
	public static String parse(BufferedImage img){
		int width = img.getWidth();
		int height = img.getHeight();

		StringBuilder sb = new StringBuilder();

		for (int j = 0; j < height; j++) {
			for (int i = 0; i < width; i++) {
				int RGB = img.getRGB(i, j);
				int red = (RGB >> 16) & 0xff;
				if (red < 100) {
					sb.append("1");
				} else {
					sb.append("0");
				}
			}
		}
		
		String s = sb.toString();
		String s2 = s;
//		System.out.println("图片的String码: " + s);
//		System.out.println("--------------");
//		for (int i = 0; i < height; i++) {
//			System.out.println(s2.substring(0, width));
//			s2 = s2.substring(width);
//		}
		
		return s;
	}
	
	public static void calResult(String s){
		if(s.indexOf(n0)>=0){
			System.out.print(" 0");
		}else if(s.indexOf(n1)>=0){
			System.out.print(" 1");
		}else if(s.indexOf(n2)>=0){
			System.out.print(" 2");
		}else if(s.indexOf(n3)>=0){
			System.out.print(" 3");
		}else if(s.indexOf(n4)>=0){
			System.out.print(" 4");
		}else if(s.indexOf(n5)>=0){
			System.out.print(" 5");
		}else if(s.indexOf(n6)>=0){
			System.out.print(" 6");
		}else if(s.indexOf(n7)>=0){
			System.out.print(" 7");
		}else if(s.indexOf(n8)>=0){
			System.out.print(" 8");
		}else if(s.indexOf(n9)>=0){
			System.out.print(" 9");
		}
	}
	
	public static void main(String[] args) throws Exception {

		//File file = new File("c:/image/num/nn" + n + ".jpg");
		File file = new File("c:/image/image1.jpg");
		
		BufferedImage imgOrg = ImageIO.read(file);
		BufferedImage img = imgOrg.getSubimage(8, 0, 10, 20);
		BufferedImage img2 = imgOrg.getSubimage(20, 0, 10, 20);
		BufferedImage img3 = imgOrg.getSubimage(35, 0, 10, 20);
		BufferedImage img4 = imgOrg.getSubimage(45, 0, 10, 20);
		
		System.out.println("图片解析结果:");
		
		String s = parse(img);
		calResult(s);
		
		String s2 = parse(img2);
		calResult(s2);
		
		String s3 = parse(img3);
		calResult(s3);
		
		String s4 = parse(img4);
		calResult(s4);		
		
	}

	
	private static String n0 = "000000000000011110000011111100011100111001100001100110000110011000011001100001100110000110011000011001100001100111001110001111110000011110000000000000";
	private static String n1 = "000000000000000110000000111000000111100000110110000010011000000001100000000110000000011000000001100000000110000000011000000001100000000110000000000000";
	private static String n2 = "000000000000011110000011111100011100111001100001100000000110000000011000000011000000011000000011000000011000000011000000011111111001111111100000000000";
	private static String n3 = "000000000000011100000011111000011000110000000011000000001100000011100000001111000000000110000000011001100001100110000110001111110000011110000000000000";
	private static String n4 = "000000000000000110000000111000000011100000011110000011011000001101100001100110001100011000111111111011111111100000011000000001100000000110000000000000";
	private static String n5 = "000000000000111111000011111100001100000001100000000110111000011111110001100001100000000110000000011001100001100110000110001111110000011110000000000000";
	private static String n6 = "000000000000011110000011111100001100011001100000000110000000011011100001111111000111000110011000011001100001100011000110001111110000011110000000000000";
	private static String n7 = "000000000001111111100111111110000000010000000011000000011000000001100000001100000000110000000011000000001100000001100000000110000000011000000000000000";
	private static String n8 = "000000000000011110000011111100011000011001100001100110000110001111110000111111000110000110011000011001100001100110000110001111110000011110000000000000";
	private static String n9 = "000000000000011110000011111100011000011001100001100110000110011000111000111111100001110110000000011000000001100110001100001111110000011110000000000000";
	private static String n = "9";
}
  • 大小: 1.3 KB
  • num.rar (13.6 KB)
  • 下载次数: 357
  • 大小: 1.2 KB
3
3
分享到:
评论

相关推荐

    java解析图片验证码

    java解析图片验证码

    jmeter识别图片验证码的包

    而当涉及到需要登录或者交互过程中有图片验证码的场景时,JMeter默认是无法直接处理的。本压缩包“jmeter识别图片验证码的包”提供了一种解决方案,即利用OCR(Optical Character Recognition,光学字符识别)技术来...

    jmeter图片验证码识别、UUID唯一ID、身份证号、手机号、MD5加密及跨越线程组参数化等脚本样例

    图片验证码识别 UUID唯一ID动态生成样本 动态生成全国的身份证号样本 动态生成手机号样本 token使用MD5加密生成样本 跨越线程组参数化样例 数据库动态参数化 数据库物理清理测试数据 等等

    命令行图片验证码识别工具

    "命令行图片验证码识别工具"就是这样一个解决方案,它允许用户通过命令行界面来识别和解析图片验证码。 这个工具基于Node.js开发,Node.js是一种流行的JavaScript运行环境,允许开发者在服务器端执行JavaScript代码...

    jmeter-jmeter使用ocrserver工具自动识别验证码配置

    jmeter使用ocrserver工具自动识别验证码配置

    图片验证码资源ZIP格式下载

    图片验证码通常包含扭曲的字母或数字,设计目的是让人类容易识别但机器难以解析。这些图片的特征可能包括随机的背景噪声、扭曲的文字形状、不同的字体、颜色变化以及透视效果。因此,机器学习模型需要学习识别这些...

    yanzheng.rar_delphi 图片识别_delphi 验证码_image_验证码 学习_验证码识别

    在这个项目中,开发者使用Delphi的图形处理能力来处理和解析图片验证码。图片识别是验证码识别的关键步骤,它通常涉及到图像预处理、特征提取和模式识别。 1. 图像预处理:在识别前,图片通常需要经过一系列处理,...

    图片验证码

    图片验证码是一种广泛应用于网络安全验证的技术,其主要目的是防止自动化程序(如机器人)对网站进行恶意操作,例如批量注册、刷票等。通过让用户识别并输入图片中显示的一组随机字符,图片验证码确保了只有具备人类...

    java生成图片验证码

    Java作为一门广泛使用的服务器端编程语言,提供了丰富的功能来生成图片验证码。本篇将深入讲解如何使用Java Servlet来实现这一过程。 首先,我们来看标题"java生成图片验证码"。这个标题暗示我们将探讨的是在Java...

    验证码识别,图片解析

    图像识别则是通过算法解析图片内容,识别其中的文字、形状或物体。 验证码识别通常分为以下几个步骤: 1. 图像预处理:首先,我们需要对验证码图片进行预处理,包括灰度化、二值化、噪声消除等,目的是将复杂的...

    vc++ 根据文字生成图片 文字图片验证码.zip

    "vc++ 根据文字生成图片 文字图片验证码.zip"是一个关于如何使用Visual C++(简称VC++)编程语言来创建文字图片验证码的项目。这个压缩包可能包含必要的源代码、文档和其他资源,帮助开发者了解和实现验证码生成的...

    实用的PHP图片验证码

    在网站的安全性方面,图片验证码(CAPTCHA)是防止自动机器人或恶意爬虫进行非法操作的重要工具。本文将深入探讨如何使用PHP创建一个实用的图片验证码,包括其功能、实现原理以及解决可能出现的问题。 首先,我们要...

    图片验证码(C# VS2008)

    图片验证码通常包含一组随机生成的字符,这些字符扭曲、倾斜或者加上噪点,使得人眼能识别但机器难以自动解析。实现这一功能的关键步骤包括: 1. **随机字符生成**:验证码通常由4到6个随机字母或数字组成,这需要...

    图片验证码识别组件,附源码

    图片验证码通常由一串随机字符或数字组成,这些字符经过扭曲、旋转、加噪等处理,使得人类可以轻易识别,而机器难以解析。这种设计旨在增加自动化程序识别的难度,从而保护网站的安全。 图片验证码识别组件的核心...

    基于C#语言的识别图片的验证码程序

    综上所述,"基于C#语言的识别图片的验证码程序"是一个结合了图像处理技术和机器学习的项目。通过逐步的图像预处理、字符分割、识别以及结果整合,我们可以构建一个能应对不同验证码挑战的识别系统。这个过程中,...

    c# 前后端 点选图片验证码 源码

    本文将深入探讨基于C# MVC框架实现的点选图片验证码的源码知识。 首先,让我们理解验证码的基本概念。验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”的缩写...

    通用图片验证码识别 (大漠字库)

    《通用图片验证码识别技术解析与应用》 验证码(CAPTCHA)是一种网络安全机制,用于防止自动化的机器人程序进行恶意操作,如垃圾邮件发送、账号注册等。随着技术的发展,验证码的形式日益多样化,其中以图片验证码...

    粘连字符的图片验证码

    着重于有粘连字符的猫扑和西祠胡同网站验证码进行识别,难点在于分割图片中的粘连字符。对字符是模糊粘连的猫扑验 证码,提出了基于局部极小值和最小投影值的方法来分割;对有交错粘连的西祠胡同验证码,通过颜色...

Global site tag (gtag.js) - Google Analytics