Skip to content

Commit 96375c1

Browse files
committedSep 6, 2019
Quick.Compression new functions
1 parent 895158f commit 96375c1

File tree

1 file changed

+183
-10
lines changed

1 file changed

+183
-10
lines changed
 

‎Quick.Compression.pas

+183-10
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{ ***************************************************************************
22
3-
Copyright (c) 2016-2017 Kike Pérez
3+
Copyright (c) 2016-2019 Kike Pérez
44
55
Unit : Quick.Compression
66
Description : Compression functions
77
Author : Kike Pérez
8-
Version : 1.1
8+
Version : 1.2
99
Created : 14/08/2018
10-
Modified : 20/08/2018
10+
Modified : 05/09/2019
1111
1212
This file is part of QuickLib: https://github.com/exilon/QuickLib
1313
@@ -34,19 +34,26 @@ interface
3434

3535
uses
3636
Classes,
37-
System.SysUtils,
38-
System.ZLib;
37+
SysUtils,
38+
ZLib,
39+
System.NetEncoding;
3940

4041
type
4142

4243
TCompressionLevel = TZCompressionLevel;
4344

44-
function CompressString(const aStr : string; aLevel : TCompressionLevel = zcDefault) : string;
45+
function CompressString_Deprecated(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
46+
function DecompressString_Deprecated(const aStr: string) : string;
47+
function CompressString(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
4548
function DecompressString(const aStr: string) : string;
49+
function CompressGZipString(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
50+
function DecompressGZipString(const aStr: string) : string;
51+
function CompressAndEncodeString(const aStr: string; aCompressionLevel : TCompressionLevel = zcDefault): string;
52+
function DecodeAndDecompressString(const aStr: string): string;
4653

4754
implementation
4855

49-
function CompressString(const aStr : string; aLevel : TCompressionLevel = zcDefault) : string;
56+
function CompressString_Deprecated(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
5057
var
5158
strstream : TStringStream;
5259
zipstream : TStringStream;
@@ -55,7 +62,7 @@ function CompressString(const aStr : string; aLevel : TCompressionLevel = zcDefa
5562
try
5663
zipstream := TStringStream.Create('',TEncoding.ANSI);
5764
try
58-
ZCompressStream(strstream, zipstream, aLevel);
65+
ZCompressStream(strstream, zipstream, aCompressionLevel);
5966
zipstream.Position := 0;
6067
Result := zipstream.DataString;
6168
finally
@@ -66,7 +73,7 @@ function CompressString(const aStr : string; aLevel : TCompressionLevel = zcDefa
6673
end;
6774
end;
6875

69-
function DecompressString(const aStr: string) : string;
76+
function DecompressString_Deprecated(const aStr: string) : string;
7077
var
7178
strstream : TStringStream;
7279
zipstream : TStringStream;
@@ -75,7 +82,8 @@ function DecompressString(const aStr: string) : string;
7582
try
7683
strstream := TStringStream.Create('',TEncoding.UTF8);
7784
try
78-
ZDecompressStream(zipstream, strstream);
85+
zipstream.Position := 0;
86+
ZDecompressStream(zipstream,strstream);
7987
strstream.Position := 0;
8088
Result := strstream.DataString;
8189
finally
@@ -86,4 +94,169 @@ function DecompressString(const aStr: string) : string;
8694
end;
8795
end;
8896

97+
function CompressString(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
98+
var
99+
instream : TStringStream;
100+
zipstream : TMemoryStream;
101+
outstream : TStringStream;
102+
begin
103+
instream := TStringStream.Create(aStr,TEncoding.UTF8);
104+
try
105+
zipstream := TMemoryStream.Create;
106+
try
107+
ZCompressStream(instream,zipstream,aCompressionLevel);
108+
zipstream.Position := 0;
109+
outstream := TStringStream.Create('',TEncoding.UTF8);
110+
try
111+
outstream.CopyFrom(zipstream,0);
112+
Result := string(outstream.DataString);
113+
finally
114+
outstream.Free;
115+
end;
116+
finally
117+
zipstream.Free;
118+
end;
119+
finally
120+
instream.Free;
121+
end;
122+
end;
123+
124+
function DecompressString(const aStr: string) : string;
125+
var
126+
instream : TStringStream;
127+
zipstream : TMemoryStream;
128+
outstream : TStringStream;
129+
begin
130+
instream := TStringStream.Create(aStr,TEncoding.UTF8);
131+
try
132+
zipstream := TStringStream.Create;
133+
try
134+
zipstream.CopyFrom(instream,0);
135+
outstream := TStringStream.Create('',TEncoding.UTF8);
136+
try
137+
ZDecompressStream(zipstream,outstream);
138+
outstream.Position := 0;
139+
Result := string(outstream.DataString);
140+
finally
141+
outstream.Free;
142+
end;
143+
finally
144+
zipstream.Free;
145+
end;
146+
finally
147+
instream.Free;
148+
end;
149+
end;
150+
151+
function CompressGZipString(const aStr : string; aCompressionLevel : TCompressionLevel = zcDefault) : string;
152+
var
153+
instream : TStringStream;
154+
outstream : TStringStream;
155+
zipstream : TZCompressionStream;
156+
begin
157+
outstream := TStringStream.Create('',TEncoding.ANSI);
158+
try
159+
zipstream := TZCompressionStream.Create(outstream,System.ZLib.TZCompressionLevel(aCompressionLevel),15 + 16);
160+
try
161+
instream := TStringStream.Create(aStr,TEncoding.UTF8);
162+
try
163+
instream.Position := 0;
164+
zipstream.CopyFrom(instream,instream.Size);
165+
finally
166+
instream.Free;
167+
end;
168+
finally
169+
zipstream.Free;
170+
end;
171+
outstream.Position := 0;
172+
Result := outstream.DataString;
173+
finally
174+
outstream.Free;
175+
end;
176+
177+
end;
178+
179+
function DecompressGZipString(const aStr: string) : string;
180+
var
181+
outstream : TStringStream;
182+
instream : TStringStream;
183+
unzipstream : TZDecompressionStream;
184+
begin
185+
outstream := TStringStream.Create('',TEncoding.UTF8);
186+
try
187+
instream := TStringStream.Create(aStr,TEncoding.ANSI);
188+
try
189+
unzipstream := nil;
190+
try
191+
unzipstream := TZDecompressionStream.Create(instream,15 + 16);
192+
outstream.CopyFrom(unzipstream,0);
193+
finally
194+
unzipstream.Free;
195+
end;
196+
finally
197+
instream.Free;
198+
end;
199+
outstream.Position := 0;
200+
Result := outstream.DataString;
201+
finally
202+
outstream.Free;
203+
end;
204+
end;
205+
206+
function CompressAndEncodeString(const aStr: string; aCompressionLevel : TCompressionLevel = zcDefault): string;
207+
var
208+
utf8stream: TStringStream;
209+
zipstream: TMemoryStream;
210+
base64stream: TStringStream;
211+
begin
212+
utf8stream := TStringStream.Create(aStr,TEncoding.UTF8);
213+
try
214+
zipstream := TMemoryStream.Create;
215+
try
216+
ZCompressStream(utf8stream,zipstream,TZCompressionLevel(aCompressionLevel));
217+
base64stream := TStringStream.Create('',TEncoding.ASCII);
218+
try
219+
zipstream.Position := 0;
220+
TNetEncoding.Base64.Encode(zipstream,base64stream);
221+
base64stream.Position := 0;
222+
Result := string(base64stream.DataString);
223+
finally
224+
base64stream.Free;
225+
end;
226+
finally
227+
zipstream.Free;
228+
end;
229+
finally
230+
utf8stream.Free;
231+
end;
232+
end;
233+
234+
function DecodeAndDecompressString(const aStr: string): string;
235+
var
236+
utf8stream: TStringStream;
237+
zipstream: TMemoryStream;
238+
base64stream: TStringStream;
239+
begin
240+
base64stream := TStringStream.Create(aStr,TEncoding.ASCII);
241+
try
242+
zipstream := TMemoryStream.Create;
243+
try
244+
base64stream.Position := 0;
245+
TNetEncoding.Base64.Decode(base64stream,zipstream);
246+
zipstream.Position := 0;
247+
utf8stream := TStringStream.Create('',TEncoding.UTF8);
248+
try
249+
ZDecompressStream(zipstream,utf8stream);
250+
Result := string(utf8stream.DataString);
251+
finally
252+
utf8stream.Free;
253+
end;
254+
finally
255+
zipstream.Free;
256+
end;
257+
finally
258+
base64stream.Free;
259+
end;
260+
end;
261+
89262
end.

0 commit comments

Comments
 (0)
Please sign in to comment.