Pascal (Lazarus/Delphi)
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
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.