0

基本的なキャプチャ画像を含むWebページがあります。Webサイトから画像をダウンロードしてTesaractを使用してキャプチャを解決しました。この関数を使用して、ダウンロードせずにTimageオブジェクトに画像を表示しています。

FUNCTION DownloadImage(CONST URL : STRING ; ImageType : TGraphicClass = NIL) : TBitMap;
  VAR
    HTTP        : TIdHttp;
    S           : TStream;
    IMG         : TGraphic;
    STR         : AnsiString;
    LHandler: TIdSSLIOHandlerSocketOpenSSL;

  BEGIN
    HTTP:=TIdHttp.Create(NIL);
    LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    TRY
      HTTP.IOHandler:=LHandler;
      S:=TMemoryStream.Create;
      TRY
        HTTP.Get(URL,S);
        IF NOT Assigned(ImageType) THEN BEGIN
          S.Position:=0;
          SetLength(STR,5);
          S.Read(STR[1],LENGTH(STR));
          IF COPY(STR,1,2)='BM' THEN
            ImageType:=TBitMap
          ELSE IF COPY(STR,1,3)='GIF' THEN
            ImageType:=TGIFImage
          ELSE IF COPY(STR,2,3)='PNG' THEN
            ImageType:=TPngImage
          ELSE IF (ORD(STR[1])=$FF) AND (ORD(STR[2])=$D8) THEN
            ImageType:=TJPEGImage
        END;
        IF NOT Assigned(ImageType) THEN RAISE EInvalidImage.Create('Unrecognized file format!');
        IMG:=ImageType.Create;
        TRY
          S.Position:=0;
          IMG.LoadFromStream(S);
          Result:=TBitMap.Create;
          TRY
            Result.Assign(IMG)
          EXCEPT
            Result.Free;
            RAISE
          END
        FINALLY
          IMG.Free
        END
      FINALLY
        S.Free
      END
    FINALLY
      HTTP.Free
    END
  END;

またはダウンロード画像用

function DownLoadInternetFile(Source, Dest : String): Boolean;
begin
  try
    Result := URLDownloadToFile(nil,PChar(Source),PChar(Dest),0,nil) = 0
  except
    Result := False;
  end;
end;

問題は、画像を取得するためにWebサイトに接続するこれらの機能の両方であり、このため、フォームでWebブラウザーを使用してページをナビゲートすると、ダウンロードしたcaptcha画像と参照したページのcaptcha画像が異なり、取得しようとしています。ドキュメントが完成したときにembeddedwbまたはwebbrowserオブジェクトから直接画像を取得しました。実行時にwebbrowserのスクリーンショットを取得しようとしましたが、失敗しました。Webページは「https://esgm.sgk.gov.tr/Esgm/」です。ありがとうございます。事前に悪い英語でごめんなさい

4

1 に答える 1

1

それがフォーム上の TWebBrowser である場合、そのドキュメントを変更できる可能性があります。キャンバスをドキュメントに追加し、キャンバスに画像を描画してから、canvas.toDataURL を使用して base64 でエンコードされた画像の表現を取得できます。

この質問でも同様のことが行われますが、Javascript のみです。 JavaScript で画像データを取得しますか?

これは、Delphi でこのような結果になるはずです。

function GetBase64Image(WebBrowser: TWebBrowser; ImageId: string): string;
var
  Document, Image, Canvas, Context: OleVariant;
begin
  Document := WebBrowser.Document;
  Image := Document.getElementById(ImageId);
  Canvas := Document.createElement('canvas');
  Canvas.Width := Image.Width;
  Canvas.Height := Image.Height;

  Context := Canvas.getContext('2d');
  Context.drawImage(Image, 0, 0);

  Result := Canvas.toDataURL('image/png');
  // Have to fix this. No time, sorry.
  //return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
end;
于 2012-11-20T13:12:35.460 に答える