|
@@ -1,13 +1,13 @@
|
|
{ ***************************************************************************
|
|
{ ***************************************************************************
|
|
|
|
|
|
- Copyright (c) 2016-2017 Kike Pérez
|
|
|
|
|
|
+ Copyright (c) 2016-2019 Kike Pérez
|
|
|
|
|
|
Unit : Quick.Compression
|
|
Unit : Quick.Compression
|
|
Description : Compression functions
|
|
Description : Compression functions
|
|
Author : Kike Pérez
|
|
Author : Kike Pérez
|
|
- Version : 1.1
|
|
|
|
|
|
+ Version : 1.2
|
|
Created : 14/08/2018
|
|
Created : 14/08/2018
|
|
- Modified : 20/08/2018
|
|
|
|
|
|
+ Modified : 05/09/2019
|
|
|
|
|
|
This file is part of QuickLib: https://github.com/exilon/QuickLib
|
|
This file is part of QuickLib: https://github.com/exilon/QuickLib
|
|
|
|
|
|
@@ -34,19 +34,26 @@ interface
|
|
|
|
|
|
uses
|
|
uses
|
|
Classes,
|
|
Classes,
|
|
- System.SysUtils,
|
|
|
|
- System.ZLib;
|
|
|
|
|
|
+ SysUtils,
|
|
|
|
+ ZLib,
|
|
|
|
+ System.NetEncoding;
|
|
|
|
|
|
type
|
|
type
|
|
|
|
|
|
TCompressionLevel = TZCompressionLevel;
|
|
TCompressionLevel = TZCompressionLevel;
|
|
|
|
|
|
- function CompressString(const aStr : string; aLevel : TCompressionLevel = zcDefault) : string;
|
|
|
|
|
|
+ function CompressString_Deprecated(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
|
|
|
|
+ function DecompressString_Deprecated(const aStr: string) : string;
|
|
|
|
+ function CompressString(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
|
|
function DecompressString(const aStr: string) : string;
|
|
function DecompressString(const aStr: string) : string;
|
|
|
|
+ function CompressGZipString(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
|
|
|
|
+ function DecompressGZipString(const aStr: string) : string;
|
|
|
|
+ function CompressAndEncodeString(const aStr: string; aCompressionLevel : TCompressionLevel = zcDefault): string;
|
|
|
|
+ function DecodeAndDecompressString(const aStr: string): string;
|
|
|
|
|
|
implementation
|
|
implementation
|
|
|
|
|
|
-function CompressString(const aStr : string; aLevel : TCompressionLevel = zcDefault) : string;
|
|
|
|
|
|
+function CompressString_Deprecated(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
|
|
var
|
|
var
|
|
strstream : TStringStream;
|
|
strstream : TStringStream;
|
|
zipstream : TStringStream;
|
|
zipstream : TStringStream;
|
|
@@ -55,7 +62,7 @@ begin
|
|
try
|
|
try
|
|
zipstream := TStringStream.Create('',TEncoding.ANSI);
|
|
zipstream := TStringStream.Create('',TEncoding.ANSI);
|
|
try
|
|
try
|
|
- ZCompressStream(strstream, zipstream, aLevel);
|
|
|
|
|
|
+ ZCompressStream(strstream, zipstream, aCompressionLevel);
|
|
zipstream.Position := 0;
|
|
zipstream.Position := 0;
|
|
Result := zipstream.DataString;
|
|
Result := zipstream.DataString;
|
|
finally
|
|
finally
|
|
@@ -66,7 +73,7 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
-function DecompressString(const aStr: string) : string;
|
|
|
|
|
|
+function DecompressString_Deprecated(const aStr: string) : string;
|
|
var
|
|
var
|
|
strstream : TStringStream;
|
|
strstream : TStringStream;
|
|
zipstream : TStringStream;
|
|
zipstream : TStringStream;
|
|
@@ -75,7 +82,8 @@ begin
|
|
try
|
|
try
|
|
strstream := TStringStream.Create('',TEncoding.UTF8);
|
|
strstream := TStringStream.Create('',TEncoding.UTF8);
|
|
try
|
|
try
|
|
- ZDecompressStream(zipstream, strstream);
|
|
|
|
|
|
+ zipstream.Position := 0;
|
|
|
|
+ ZDecompressStream(zipstream,strstream);
|
|
strstream.Position := 0;
|
|
strstream.Position := 0;
|
|
Result := strstream.DataString;
|
|
Result := strstream.DataString;
|
|
finally
|
|
finally
|
|
@@ -86,4 +94,169 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function CompressString(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
|
|
|
|
+var
|
|
|
|
+ instream : TStringStream;
|
|
|
|
+ zipstream : TMemoryStream;
|
|
|
|
+ outstream : TStringStream;
|
|
|
|
+begin
|
|
|
|
+ instream := TStringStream.Create(aStr,TEncoding.UTF8);
|
|
|
|
+ try
|
|
|
|
+ zipstream := TMemoryStream.Create;
|
|
|
|
+ try
|
|
|
|
+ ZCompressStream(instream,zipstream,aCompressionLevel);
|
|
|
|
+ zipstream.Position := 0;
|
|
|
|
+ outstream := TStringStream.Create('',TEncoding.UTF8);
|
|
|
|
+ try
|
|
|
|
+ outstream.CopyFrom(zipstream,0);
|
|
|
|
+ Result := string(outstream.DataString);
|
|
|
|
+ finally
|
|
|
|
+ outstream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ zipstream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ instream.Free;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function DecompressString(const aStr: string) : string;
|
|
|
|
+var
|
|
|
|
+ instream : TStringStream;
|
|
|
|
+ zipstream : TMemoryStream;
|
|
|
|
+ outstream : TStringStream;
|
|
|
|
+begin
|
|
|
|
+ instream := TStringStream.Create(aStr,TEncoding.UTF8);
|
|
|
|
+ try
|
|
|
|
+ zipstream := TStringStream.Create;
|
|
|
|
+ try
|
|
|
|
+ zipstream.CopyFrom(instream,0);
|
|
|
|
+ outstream := TStringStream.Create('',TEncoding.UTF8);
|
|
|
|
+ try
|
|
|
|
+ ZDecompressStream(zipstream,outstream);
|
|
|
|
+ outstream.Position := 0;
|
|
|
|
+ Result := string(outstream.DataString);
|
|
|
|
+ finally
|
|
|
|
+ outstream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ zipstream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ instream.Free;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function CompressGZipString(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
|
|
|
|
+var
|
|
|
|
+ instream : TStringStream;
|
|
|
|
+ outstream : TStringStream;
|
|
|
|
+ zipstream : TZCompressionStream;
|
|
|
|
+begin
|
|
|
|
+ outstream := TStringStream.Create('',TEncoding.ANSI);
|
|
|
|
+ try
|
|
|
|
+ zipstream := TZCompressionStream.Create(outstream,System.ZLib.TZCompressionLevel(aCompressionLevel),15 + 16);
|
|
|
|
+ try
|
|
|
|
+ instream := TStringStream.Create(aStr,TEncoding.UTF8);
|
|
|
|
+ try
|
|
|
|
+ instream.Position := 0;
|
|
|
|
+ zipstream.CopyFrom(instream,instream.Size);
|
|
|
|
+ finally
|
|
|
|
+ instream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ zipstream.Free;
|
|
|
|
+ end;
|
|
|
|
+ outstream.Position := 0;
|
|
|
|
+ Result := outstream.DataString;
|
|
|
|
+ finally
|
|
|
|
+ outstream.Free;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function DecompressGZipString(const aStr: string) : string;
|
|
|
|
+var
|
|
|
|
+ outstream : TStringStream;
|
|
|
|
+ instream : TStringStream;
|
|
|
|
+ unzipstream : TZDecompressionStream;
|
|
|
|
+begin
|
|
|
|
+ outstream := TStringStream.Create('',TEncoding.UTF8);
|
|
|
|
+ try
|
|
|
|
+ instream := TStringStream.Create(aStr,TEncoding.ANSI);
|
|
|
|
+ try
|
|
|
|
+ unzipstream := nil;
|
|
|
|
+ try
|
|
|
|
+ unzipstream := TZDecompressionStream.Create(instream,15 + 16);
|
|
|
|
+ outstream.CopyFrom(unzipstream,0);
|
|
|
|
+ finally
|
|
|
|
+ unzipstream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ instream.Free;
|
|
|
|
+ end;
|
|
|
|
+ outstream.Position := 0;
|
|
|
|
+ Result := outstream.DataString;
|
|
|
|
+ finally
|
|
|
|
+ outstream.Free;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function CompressAndEncodeString(const aStr: string; aCompressionLevel : TCompressionLevel = zcDefault): string;
|
|
|
|
+var
|
|
|
|
+ utf8stream: TStringStream;
|
|
|
|
+ zipstream: TMemoryStream;
|
|
|
|
+ base64stream: TStringStream;
|
|
|
|
+begin
|
|
|
|
+ utf8stream := TStringStream.Create(aStr,TEncoding.UTF8);
|
|
|
|
+ try
|
|
|
|
+ zipstream := TMemoryStream.Create;
|
|
|
|
+ try
|
|
|
|
+ ZCompressStream(utf8stream,zipstream,TZCompressionLevel(aCompressionLevel));
|
|
|
|
+ base64stream := TStringStream.Create('',TEncoding.ASCII);
|
|
|
|
+ try
|
|
|
|
+ zipstream.Position := 0;
|
|
|
|
+ TNetEncoding.Base64.Encode(zipstream,base64stream);
|
|
|
|
+ base64stream.Position := 0;
|
|
|
|
+ Result := string(base64stream.DataString);
|
|
|
|
+ finally
|
|
|
|
+ base64stream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ zipstream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ utf8stream.Free;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
|
|
+function DecodeAndDecompressString(const aStr: string): string;
|
|
|
|
+var
|
|
|
|
+ utf8stream: TStringStream;
|
|
|
|
+ zipstream: TMemoryStream;
|
|
|
|
+ base64stream: TStringStream;
|
|
|
|
+begin
|
|
|
|
+ base64stream := TStringStream.Create(aStr,TEncoding.ASCII);
|
|
|
|
+ try
|
|
|
|
+ zipstream := TMemoryStream.Create;
|
|
|
|
+ try
|
|
|
|
+ base64stream.Position := 0;
|
|
|
|
+ TNetEncoding.Base64.Decode(base64stream,zipstream);
|
|
|
|
+ zipstream.Position := 0;
|
|
|
|
+ utf8stream := TStringStream.Create('',TEncoding.UTF8);
|
|
|
|
+ try
|
|
|
|
+ ZDecompressStream(zipstream,utf8stream);
|
|
|
|
+ Result := string(utf8stream.DataString);
|
|
|
|
+ finally
|
|
|
|
+ utf8stream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ zipstream.Free;
|
|
|
|
+ end;
|
|
|
|
+ finally
|
|
|
|
+ base64stream.Free;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
end.
|
|
end.
|