www.2527.com_澳门新葡8455手机版_新京葡娱乐场网址_
做最好的网站

WebBrowser控件上网页验证码图片识别教程,Server插

2019-08-24 00:28 来源:未知

procedure TForm1.BitBtn2Click(Sender: TObject);
var
            graphic1:Timage;
begin
graphic1:=Timage.Create(self);
graphic1.picture.loadfromfile(openpicturedialog1.filename);
table1.Open;
table1.insert;
table1.fieldbyname(’id’).asstring:=’121’;
table1.fields[1].assign(graphic1.Picture);
table1.post;
table1.close;
graphic1.free;
end;

table1.fieldbyname(address).asfloat:=edit3.text;

手续一:获取网页中验证码图片的url地址在delphi中步向二个BitBtn和多个memo以及WebBrowser控件完成网页中验证码图片的url地址的收获程序如下:
procedure TForm1.BitBtn1Click(Sender: TObject);var I:Integer;begin for I:=0 to WebBrowser1.OleObject.document.images.length-1 do Memo1.Lines.Add(WebBrowser1.OleObject.document.images.item;end;

 

(2)图像保存的拍卖。

方法二:
代码:
procedure TForm1.BitBtn4Click(Sender: TObject);var p: pbyteArray; //位指针 x,y: integer;//x宽,y高 Bmp: TBitmap;//位图组件 Gray: integer;//灰度值begin Bmp := TBitmap.Create;//创立一个TBitmap Bmp.Assign(Form1.Image1.Picture.Bitmap);//将image图片转为位图模式Bmp.PixelFormat := pf24bit; //设为二十五人之彩色位图,PixelFormat 为位图的内部存款和储蓄器格式和颜色深浅,总共9个值 for y := 0 to Bmp.Height-1 do begin p :=Bmp.ScanLine[y];//ScanLine方法用于获取像素颜色值 for x:=0 to Bmp.Width-1 do begin Gray:=马克斯(p[3*x 2],p[3*x 1]); //使用max函数旭定义Math单元 格雷:=马克斯(Gray,p[3*x]); p[3*x 2]:=byte; p[3*x 1]:=byte; p[3*x]:=byte; end; end; image4.Picture.Bitmap := Bmp; Bmp.Free;//释放TBitmapend;
原图: 图片 1
处理后:图片 2
方法三:**使用公式Y=0.299奥迪Q5 0.857G 0.113B*
procedure TForm1.BitBtn4Click(Sender: TObject);var p: pbyteArray; //位指针 x,y: integer;//x宽,y高 Bmp: TBitmap;//位图组件 Gray: integer;//灰度值begin Bmp := TBitmap.Create;//建构一个TBitmap Bmp.Assign(Form1.Image1.Picture.Bitmap);//将image图片转为位图情势Bmp.PixelFormat := pf24bit; //设为二十多少人之彩色位图,PixelFormat 为位图的内部存款和储蓄器格式和颜色深浅,总共9个值 for y := 0 to Bmp.Height-1 do begin p :=Bmp.ScanLine[y];//ScanLine方法用于获取像素颜色值 for x:=0 to Bmp.Width-1 do begin Gray:=round(p[3
x 2]*0.3 p[3*x 1]*0.59 p[3*x]*0.11);//公式Y=0.299R 0.857G 0.113B p[3*x 2]:=byte; p[3*x 1]:=byte; p[3*x]:=byte; end; end; image4.Picture.Bitmap := Bmp; Bmp.Free;//释放TBitmapend;
原图: 图片 3
处理后:图片 4

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
openpicturedialog1.execute;
image1.picture.loadfromfile(openpicturedialog1.filename);
end;

另外诸如Caption之类的本性设置不再汇报。

手续二:下载网页中验证码图片到image中
在delphi中投入一个BitBtn和三个image以及WebBrowser控件,image用来展现下载的图形
代码:
procedure TForm1.BitBtn5Click(Sender: TObject);
var
i:Integer;
rang:IHTMLControlRange;
s:string;
begin
try
s := (IHTMLDocument2(WebBrowser.Document).images.item('img_validatecode',EmptyParam) as IHTMLElement).getAttribute;
rang:=((IHTMLDocument2(WebBrowser.Document).body as HTMLBody).createControlRange)as IHTMLControlRange;
rang.add(IHTMLDocument2(WebBrowser.Document).images.item('img_validatecode',EmptyParam)as IHTMLControlElement);
rang.execCommand('Copy',False,0);
Image1.Picture.Assign(clipboard);//若为加入Clipbrd单元,编写翻译时会提示clipboard为定义
except
end;
end;
注意:
1、在前后相继的uses中必得先参预ActiveX,Clipbrd单元,在那之中Clipbrd不参预会导致clipboard未定义
2、img_validatecode为网页验证码图片的id号,
3、上面代码为delphiWebBrowser中的通用代码,使用时只需修改id号和uses中 增加单元就可以使用
步骤三:image图片的灰度管理 第一我们供给驾驭图片的灰度管理是将一些彩色的验证码图片产生水晶绿图片方便图片的接续管理,这里有二种办法对图纸张开乳白处理。
艺术一:求出ENCOREGB那多少个像素点的平均值,然后把平均值分给多个像素点;
措施二:求每一个像素点凯雷德GB七个轻重的最大值,然后把最大值分给四个像素点;
办法三:依据YUV的水彩空间,求出Y的值;
方法一:
代码:
procedure TForm1.BitBtn4Click(Sender: TObject);var p: pbyteArray; //位指针 x,y: integer;//x宽,y高 Bmp: TBitmap;//位图组件 Gray: integer;//灰度值begin Bmp := TBitmap.Create;//建立三个TBitmap Bmp.Assign(Form1.Image1.Picture.Bitmap);//将image图片转为位图方式Bmp.PixelFormat := pf24bit; //设为二十二个人之彩色位图,PixelFormat为位图的内部存款和储蓄器格式和颜色深浅,总共9个值 for y := 0 to Bmp.Height-1 do begin p :=Bmp.ScanLine[y];//ScanLine方法用于获取像素颜色值 for x:=0 to Bmp.Width-1 do begin 格雷:=(p[3*x 2] p[3*x 1] p[3*x]) div 3;//3处像素点的平均值 p[3*x 2]:=byte; p[3*x 1]:=byte; p[3*x]:=byte; end; end; image4.Picture.Bitmap := Bmp; Bmp.Free;//释放TBitmapend;
原图: 图片 5
处理后:图片 6

 

graphic1:=TGraphic.Create;

步骤四:image图片的二值化

    向SQL Server插入记录相信我们都会做,然而只要表中隐含Image字段就倒霉弄了,这里有贰个事例,极度安全,同有时候也向大家显示动态变化控件的本事!
在SQL Server中确立TEST表,四个字段,id varchar(10),photo image(16);

table1.fieldbyname(telephon).asstring:=edit2.text;

在对图像二值化以前要求对图像进行灰度处理,二值化原理:通过设定阈值(threshold),把灰度图像成为仅用0或1来表示图像指标和背景,其中图像指标非常多为数字,字母,设为1,;背景设为0。在位图中0对应0,1对应255,二值化方法非常多,然而最主假若介于对阈值的挑选。 阈值的挑选关键分为两类:全局阈值和一些阈值。
大局阈值是对整个图像选拔三个阈值举办私分,比方固定阈值法二值化、剖断分析化二值化等;
有个别阈值是将图像分为几块,每一个子块选取区别的阈值;(具体某些阈值法能够自动百度,这里不必过多解释)
代码:
procedure TForm1.BitBtn4Click(Sender: TObject);var p: pbyteArray; //位指针 x,y: integer;//x宽,y高 Bmp: TBitmap;//位图组件 Gray: integer;//灰度值begin Bmp := TBitmap.Create;//建设构造二个TBitmap Bmp.Assign(Form1.Image1.Picture.Bitmap);//将image图片转为位图情势Bmp.PixelFormat := pf24bit; //设为24个人之彩色位图,PixelFormat 为位图的内部存款和储蓄器格式和颜料深浅,总共9个值 for y := 0 to Bmp.Height-1 do begin p :=Bmp.ScanLine[y];//ScanLine方法用于获取像素颜色值 for x:=0 to Bmp.Width-1 do begin Gray:=round(p[3*x 2]*0.3 p[3*x 1]*0.59 p[3*x]*0.11);//公式Y=0.299Evoque 0.857G 0.113B //图像二值化 if Gray > 120 then//阈值为120 begin p[3*x 2]:=255; p[3*x 1]:=255; p[3*x]:=255; end else begin p[3*x 2]:=0; p[3*x 1]:=0; p[3*x]:=0; end;
//分割线------------------------------------- end; end; image4.Picture.Bitmap := Bmp; Bmp.Free;//释放TBitmapend;原图: 图片 7
处理后:图片 8
从功效图能够看出,图像二值化就是设定贰个阈值,然后剖断每点的QX56GB值大于依旧小于阈值,大于则为255即金色,小于阈值则为0即卡其灰。**qq:673890989 招待风野趣的伴儿沟通**经验**

映现可用:
DBIMAGE控件展现!
谢谢高手指教!

end;


在数据库数据(满含Graphic字段的多少)的读取和浏览方面,Delphi这一独具庞大代码自动生功效果的面向对象的开荒工具的优越性获得痛快淋漓的反映。毫不夸张地说,没有供给一条语句就可以到位这一职能!

 

graphic1.loadfromfile(opendialog1.filename);

该窗体的严重性意义是将有些人新闻举行编制和保留。供给留意的图像保存所用的图像框必得用TImage而不可能用TDBImage,编辑框宜用Tedit而不宜用TDBEdit,那或多或少与图像的读取恰好相反。


table1.fieldbyname(zip).asfloat:=edit4.text;

图中Table1和Datasource1的习性的装置与数据的保存部分(图1)一样,所例外的是数据库数据的读取时用TDBEdit和TDBImage控件而不用TEdit和TImage。控件TDBEdit和TDBImage只要将data田野属性设置为其绝对应的域;TDBNavigator的datasouce属性设置为datasource1就能够。

1.开立三个富含Graphic字段的数据库列表。

  sfilename:=c:ff.doc;//换到图片格式就足以了
  if fileexists(sfilename) then
   deletefile(sfilename);
  bs.SaveTofile(sfilename);
  OleContainer1.CreateObjectFromFile(sfilename,false);
  //OleContainer1.LoadFromFile(sfilename);
  //OleContainer1.LoadFromStream()
  //memo1.Lines.LoadFromFile(sfilename);
// WebBrowser1.Navigate(pchar(sfilename));
finally
  bs.free;
end;

在WindowsISQ(或Databasedesktop)下create database mydb.gdb

自家也贴片给您是李维ado书上的
procedure TForm1.Button1Click(Sender: TObject);
var
sfilename:string;
function blobcont(const filename:string):string;
  begin
  with tfilestream.Create(filename,fmopenread) do
   try
    setlength(result,size);
    read(pointer(result)^,size);
   finally
    free;
   end;
  end;

级别: 散兵  
来自:厦门
OICQ:
积分:457
专家分:107
总排名:180
终极出现:二零零一-5-23 19:34:05(登入玖拾玖次)  
发表于: 2001-5-23 20:02:40

graphic1.free;

begin

图像保存的管理程序完毕把在窗体1所编纂的音信富含图像保存到对应的数据库中,其主假如要定义贰个Graphic类型的变量且该变量要用Assign()函数字传送递到对应数据库中保留。具体程序如下:

table1.fieldbyname(name).asstring:=edit1.text;

一、图像数据的保留

graphic1:TGraphic;

procedureTform1.Savebtnclick(sender:TObject);

2.确立窗体(如图1所示),设置窗体中各控件的属性。

table1.fields[4].assign(graphic1);

table1.insert;

Delphi提供了数码访谈(DataAccess)和数码调整(DataControls)的可视化控件,能够方便快速地发生负有良...

end;

Table1.active:=true;

tre

Delphi提供了数量访问(DataAccess)和数目调节(DataControls)的可视化控件,能够方便快速地发生负有可以分界面且作用强大的数据库应用程序。对于涉嫌图像数据(含Graphic字段)的数据库应用程序,如人事管理消息体系等,图像数据的存取能力是贰个重中之重。可是,有关Delphi下图象的存取,特别是图像的保存方面包车型的士本事各类材质上相当少聊起。下边,我结合二个简练的例子来验证。

beginopendialog1.execute;

数据库应用程序开采中图像数据的存取技能

里头,picture字段用于保存图像的名目(包含路线),image(Graphic字符)则用于存款和储蓄图像,其数据类型为“blob”。

create table myfrieds(name varchar(15) notnull,telephone varchar(12), address varchar(30),zipvarchar(8),picture varchar(15),image blob);

(1)图像( .bmp文件)张开的拍卖。

image1.picture.loadfromfile(opendialog1.filename);

var

Table1.Tablename:=myfriends;

begin
if opendialog1.Execute then
  begin
    sfilename:=opendialog1.FileName;
    adodataset1.Append;
    adodataset1.FieldByName(ff).asstring:=blobcont(sfilename);
    adodataset1.Post;
  end;
end;

procedureTForm1.pictopenbtnClick(Sender:TObject);

Datasource1.Dataset:=table1;

Table1.Databasename:=mydb.gdb;

3.数码管理程序的树立。

procedure TForm1.Button2Click(Sender: TObject);
var
sfilename:string;
bs:tadoblobstream;
begin
bs:=tadoblobstream.Create(tblobfield(adodataset1.FieldByName(ff)),bmread);
try

table1.post;

二、图像数据的读取

中间,各注重控件的质量设置如下:

TAG标签:
版权声明:本文由澳门新葡8455手机版发布于www.2527.com,转载请注明出处:WebBrowser控件上网页验证码图片识别教程,Server插