Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Extract data:image/png;base64 from HTML

See more Base64 Examples

Demonstrates how to extract base64 image data from HTMl and save to files.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.BinData,
  Chilkat.StringBuilder;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  sb: TStringBuilder;
  bd: TBinData;
  sbFilename: TStringBuilder;
  index: Integer;
  mayHaveMore: Boolean;
  sBase64: string;
  count: Integer;

begin
  success := False;

  sb := TStringBuilder.Create;
  bd := TBinData.Create;
  sbFilename := TStringBuilder.Create;
  index := 1;

  success := sb.LoadFile('qa_data/html/oresp body.txt','utf-8');
  //  Assume success.
  WriteLn('length = ' + sb.Length);

  mayHaveMore := True;
  while mayHaveMore = True do
    begin

      //  Get the base64 between the 1st occurrence "data:image/png;base64," and "'"
      sBase64 := sb.GetBetween('data:image/png;base64,','''');

      //  If nothing is found, then we'll exit the loop because there are no more.
      mayHaveMore := sb.LastMethodSuccess;

      if (sb.LastMethodSuccess = True) then
        begin
          //  Found something.
          //  Load into bd and save.
          success := bd.LoadEncoded(sBase64,'base64');

          sbFilename.SetString('qa_output/png_');
          sbFilename.AppendInt(index);
          sbFilename.Append('.png');

          bd.WriteFile(sbFilename.GetAsString());

          //  Replace "data:image/png;base64" with "data:image-png;base64" so the next iteration finds the next occurrence.
          sb.ReplaceFirst('data:image/png;base64','data:image-png;base64');
        end;

      index := index + 1;
    end;

  //  Restore our replacements..
  count := sb.Replace('data:image-png;base64','data:image/png;base64');

  WriteLn('All done.');


  sb.Free;
  bd.Free;
  sbFilename.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.