C#实现截取验证码图片
作者:老狗子 发布时间:2023-08-04 04:22:56
标签:C#,截取,验证码
本文实例为大家分享了C#截取验证码图片的具体代码,供大家参考,具体内容如下
使用Graphics类中的DrawImage方法,这个方法有30种重载方式,这里只介绍一种,也是我认为最直观的一种,代码如下:
using System.Drawing;
namespace kq.Utils
{
public static class CommonTools
{
public static Bitmap getVerifyCode(Bitmap srcBmp, Rectangle rectangle)
{
//初始化一个bmp对象,90代表图片的宽度,37代表高度
Bitmap bmp = new Bitmap(90, 37);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(srcBmp, 0, 0, rectangle, GraphicsUnit.Pixel);
return bmp;
}
}
}
其中g.DrawImage方法中第一个参数代表被截取的原图,第二第三个参数(0,0)代表在bmp中画的起点xy坐标,第四个参数rectangle代表从srcBmp中截取的区域,最后一个参数GraphicsUnit.Pixel表示以上代表距离以及区域的参数的单位,Pixel代表像素。
以下是使用方式:
using kq.Utils;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Drawing;
namespace kq
{
class Program
{
static void Main(string[] args)
{
try
{
string screenImg = @"d:\screenImg.png";
Bitmap fromBmp = new Bitmap(screenImg);
Rectangle section1 = new Rectangle(936, 523, 90, 37);
Bitmap bmp = CommonTools.getVerifyCode(fromBmp, section1);
bmp.Save(@"d:\验证码.bmp");
}
catch (System.Exception e)
{
System.Console.WriteLine(e.Message);
}
}
}
}
假设我们要截取一张图片中的验证码部分,代码中的(936,523)代表原图中验证码左上角的坐标,(90,37)分别表示验证码的长和高,以上单位都是像素,如下图:
最后截取出来的结果如下图:
来源:https://www.cnblogs.com/lzttttt/archive/2018/12/12/10107881.html


猜你喜欢
- 字符串采用unicode编码的方式时,计算字符串长度的方法找出UNICODE编码中的汉字的代表的范围“\u4E00” 到“\u9FBB”之间
- 前言:IO流主要分为两大类,分别是字节流与字符流注意:1、音频文件、图片、视频(范围广),就用字节流2、只涉及到文本的,就用字符流使用字节流
- 温故而知新网上说多进程的文章很多,不过基本都是在讨论很深的东西,这是需要去专研的,而我是来这篇是用来偷懒的(应用层次),记录的都是自己对多进
- SpringBoot应用启动run方法SpringApplication.java 中执行的代码@SpringBootApplication
- 本文为大家分析了Java中字符流与字节流的区别,供大家参考,具体内容如下1. 什么是流 Java中的流是
- DateTime类DateTime类是C#中最常用的时间类之一,它表示一个日期和时间。可以使用DateTime.Now属性获取当前时间,也可
- Pager.javapackage pers.kangxu.datautils.common;import java.io.Serializ
- java计算对数和指数public static void main(String[] args) throws InterruptedEx
- 本文实例为大家分享了java文件上传下载的具体代码,供大家参考,具体内容如下文件上传@RequestMapping(value="
- import android.provider.Settings.Secure;private String android_id = Se
- 本文针对java * 进行知识点整理,具体内容如下一. JAVA的 * (比较官方说法) 代理模式是常用的java设计模式,他的特征是代
- abstract可以用来修饰类,方法,属性,索引器和时间,这里不包括字段. 使用abstrac修饰的类,该类只能作为其他类的基类,不能实例化
- 一、编辑框EditText编辑框用于接收键盘输入的文字,由文本视图派生而来,除了TextView已有的各种属性和方法,EditText还支持
- 前言与消息发送紧密相关的几行代码:1. DefaultMQProducer producer = new DefaultMQProducer
- 文件目录结构文件目录结构很重要,特别注意的是rule文件要放在主启动类上一级位置,才能够扫描。写pom<dependencies>
- 归纳一些网上取JAVA路径的方法: 注明:如果从ANT启动程序,this.getClass().getResource("&quo
- step1:先移除centos自带的jdkrpm -qa|grep javarpm -e --nodeps xxstep2:安装jdk (所
- 前言枚举为我看日常开发的可读性提供的非常好的支持,但是有时在使用枚举类型时,我们需要取名称和值,甚至有时候还需要取枚举类型的描述。通过反射,
- 本文实例为大家分享了java实现仿射密码加密解密的具体代码,供大家参考,具体内容如下加密:将明文转化为对应的数字,如 ‘a'->
- 实时代码模板(Live Templates)我们先来看一个gif图:大兄弟,你看清我的操作了么?这个就是实时代码模板的功能。我们来看一下怎么