1、放置2个button,2个edit,2个image
2、button1的过程var ms:TMemoryStream; jpg:TJPEGImage;begin try jpg:=TJPEGImage.Create; ms:=TMemoryStream.Create; idhtp1.Get(edt1.Text,ms); ms.Position:=0; jpg.LoadFromStream(ms); img1.Picture.Assign(jpg); jpg.SaveToFile('c:\123.jpg'); except ms.Free; end;
3、button2的过程,即是识别图片过程,这个过程完全模拟百度上传图片识别var i:Integer; pd:tstringlist; s,sName,sUrljpg:string; ms,ms1:TStringStream; jpg:TJPEGImage;// Cookies : TIdCookieManager; mstrCookie: string;begin try jpg:=TJPEGImage.Create; ms:=TStringStream.Create(''); ms1:=TStringStream.Create(''); img1.Picture.Bitmap.SaveToStream(ms); idhtp1.Request.UserAgent:='Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'; idhtp1.Request.AcceptLanguage:='zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.7,en;q=0.5,es-DO;q=0.3,es;q=0.2'; begin s:=(idhtp1.Post('http://image.baidu.com/pictureup/uploadshitu?' +'fr=flash&fm=index&pos=upload',mps)); s:=(idhtp1.Get('http://image.baidu.com'+s)); sName:=GetStringBetween(s,'guessWord','.split') ; sName:=Trim(StringReplace (sName,'''','', [rfReplaceAll])); sName:=Trim(StringReplace (sName,':','', [rfReplaceAll])); sUrljpg:=GetStringBetween(s,'<img class="guess-newbaike-left-img" src="','<div class="guess-newbaike-left-similarity">') ; sUrljpg:=Trim(StringReplace (sUrljpg,'amp;','', [rfReplaceAll])); sUrljpg:=Trim(StringReplace (sUrljpg,'</div>','', [rfReplaceAll])); sUrljpg:=Trim(StringReplace (sUrljpg,'">','', [rfReplaceAll]));// sUrljpg:=TIdURI.URLDecode(sUrljpg); idhtp1.Request.UserAgent := ''; mstrCookie := 'aaa=5555&bb=12345'; idhtp1.Request.AcceptEncoding := ''; if mstrCookie <> '' then begin idhtp1.Request.CustomHeaders.Add('Cookie: ' + mstrCookie); end; idhtp1.Request.Referer:='https://www.baidu.com'; idhtp1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'; idhtp1.Get(sUrljpg,ms1); ms1.Position:=0; jpg.LoadFromStream(ms1); img2.Picture.Assign(jpg); edt2.Text:='我猜您的图片是:'+Utf8ToAnsi(sName); // ShowMessage(sUrljpg); end; except MPS.Free; ms.Free; ms1.Free; end;
4、必要的过程,取字符串与字符串中间的字符function GetStringBetween(const Ful造婷用痃lStr, StrLeft, StrRight: String): string;varidx_Start,idx_End,iStrCnt: Integer;beginResult:='';idx_Start := Pos(StrLeft,FullStr)+Length(StrLeft);idx_End:= Pos(StrRight,FullStr);iStrCnt:= idx_End - idx_Start;Result:=Copy(FullStr,idx_Start,iStrCnt);end;