Last Updated:

Membuat Tool Kompresi File Pake Delphi + ZLIB

Grup KPPDI
Grup KPPDI Compress

Dari laporan Wordpress, beberapa pengunjung blog saya melakukan pencarian ‘source code kompresi file dengan Delphi’. Kelanjutannya, kini saya menulis sebuah tutorial tentang kompresi file dengan Delphi. Tutorial ini menggunakan Delphi 6 dan sebuah library open source ZLIB untuk implementasi kompresi menggunakan metode ZLIB.

Instalasi ZLIB Compression Library

Langkah pertama, silahkan Anda download ZLIB Compression Library bersama source code aplikasi yang saya demokan ini di akhir tulisan ini. Kemudian ekstraklah ke sebuah folder, misalnya di C:\ZlibEx. Selanjutnya tambahkan folder C:\ZlibEx ke Library Path Delphi melalui menu Tools>Environment Options. Pada dialog yang muncul, klik tab Library, dan klik tombol elipsis di samping kanan combobox Library path. Dialog Directories akan muncul.

Klik tombol elipsis yang dilingkari, pilih folder C:\ZlibEx di mana Anda meletakkan ZLIB Compression Library hasil ekstraksi. Tombol Add akan menjadi aktif. Klik Tombol Add, kemudian klik OK. Kembali ke dialog Environment Options. Klik OK lagi.

Mengimplementasikan ZLIB dalam kode

Kita lanjut dengan pembuatan aplikasi kompresi file.

1.    Buat sebuah aplikasi baru. Simpanlah file-file aplikasi dalam satu folder.
2.    Pada form utama, tambahkan dua buah editbox, dua buah label dan 3 buah button. Tambahkan juga sebuah OpenDialog dan sebuah SaveDialog.
Sebagai perbandingan, berikut rancangan form saya.

3.    Pindah ke kode (F12). Untuk menggunakan ZLIB, Anda harus menambahkan unit ZlibEx.pas ke klausa uses.

[sourcecode language="delphi"]
implementation
{$R *.dfm}

uses ZlibEX;
[/sourcecode]

4.    Kini kita masukkan kode untuk memilih file yang akan dikompres dan memasukkannya ke Edit1. Demikian juga dengan file target di mana hasil kompresi akan disimpan.

[sourcecode language="delphi"]
procedure TFMain.BitBtn1Click(Sender: TObject);
begin
if opendialog1.Execute then
Edit1.Text:=opendialog1.FileName;
end;

procedure TFMain.BitBtn2Click(Sender: TObject);
begin
if Savedialog1.Execute then
Edit2.Text:=SaveDialog1.FileName;
end;
[/sourcecode]

5.    Terakhir, kita buat kode untuk mengompres file sumber dan menyimpan hasilnya ke file target.

[sourcecode language="delphi"]
procedure TFMain.SpeedButton1Click(Sender: TObject);
var
F1: TFileStream;
sz1, sz2: Integer;
p1, p2: Pointer;
ratio: real;
begin
//baca file sumber ke memori
f1:=TFileStream.Create(edit1.Text, fmOpenRead);
sz1:=f1.Size;
Getmem(p1,sz1);
f1.Seek(0, soFromBeginning);
f1.Read(p1^, sz1);
f1.Free;
//mulai dengan kompresi
p2:=nil;
ZCompress(p1, sz1, p2, sz2, zcMax);
Freemem(P1, sz1);
//Simpan hasil kompresi ke File target
F1:=TFileStream.Create(Edit2.Text, fmCreate);
f1.Write(p2^, sz2);
f1.Free;
FreeMem(p2, sz2);
//hitung perbandingan ukuran file
ratio:= ((sz1 - sz2)/sz1) * 100;
lblResult.Caption:=
'Ukuran File Sumber:'#13+IntToStr(sz1)+'Bytes.'#13+
'Ukuran File Target (hasil kompresi):'#13+IntToStr(sz2)+'Bytes.'#13+
'Rasio Kompresi:'#13+FormatFloat('0.00', ratio)+'%.'#13#13+
'Kompresi selesai.';
end;
[/sourcecode]

6.    Save projek Anda dan jalankan dengan menekan F9. Jika semuanya beres, tampilan aplikasi Anda akan seperti ini:

Dan berikut, snapshot ketika kompresi telah selesai.

Kode Selengkapnya

[sourcecode language="delphi"]
unit umain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons;

type
TFMain = class(TForm)
Shape1: TShape;
Bevel1: TBevel;
Label1: TLabel;
Label2: TLabel;
Image1: TImage;
Label3: TLabel;
Edit1: TEdit;
Label4: TLabel;
Edit2: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
SpeedButton1: TSpeedButton;
GroupBox1: TGroupBox;
lblResult: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Label5: TLabel;
Label6: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure Label6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FMain: TFMain;

implementation

{$R *.dfm}

uses ZlibEX, ShellAPI;

procedure TFMain.BitBtn1Click(Sender: TObject);
begin
if opendialog1.Execute then
Edit1.Text:=opendialog1.FileName;
end;

procedure TFMain.BitBtn2Click(Sender: TObject);
begin
if Savedialog1.Execute then
Edit2.Text:=SaveDialog1.FileName;
end;

procedure TFMain.Edit1Change(Sender: TObject);
begin
SpeedButton1.Enabled:=FileExists(edit1.Text);
if SpeedButton1.Enabled then
Edit2.Text:=ChangeFileExt(edit1.Text, '.zlib')
else
Edit2.Text:='Pilih Target File Hasil kompresi...';
end;

procedure TFMain.FormCreate(Sender: TObject);
begin
Edit1.Text:='Pilih File Yang Akan Dikompress...';
end;

procedure TFMain.SpeedButton1Click(Sender: TObject);
var
F1: TFileStream;
sz1, sz2: Integer;
p1, p2: Pointer;
ratio: real;
begin
//baca file sumber ke memori
f1:=TFileStream.Create(edit1.Text, fmOpenRead);
sz1:=f1.Size;
Getmem(p1,sz1);
f1.Seek(0, soFromBeginning);
f1.Read(p1^, sz1);
f1.Free;
//mulai dengan kompresi
p2:=nil;
ZCompress(p1, sz1, p2, sz2, zcMax);
Freemem(P1, sz1);
//Simpan hasil kompresi ke File target
F1:=TFileStream.Create(Edit2.Text, fmCreate);
f1.Write(p2^, sz2);
f1.Free;
FreeMem(p2, sz2);
//hitung perbandingan ukuran file
ratio:= ((sz1 - sz2)/sz1) * 100;
lblResult.Caption:=
'Ukuran File Sumber:'#13+IntToStr(sz1)+'Bytes.'#13+
'Ukuran File Target (hasil kompresi):'#13+IntToStr(sz2)+'Bytes.'#13+
'Rasio Kompresi:'#13+FormatFloat('0.00', ratio)+'%.'#13#13+
'Kompresi selesai.';
end;

procedure TFMain.Label6Click(Sender: TObject);
begin
ShellExecute(handle, 'open', PChar(TLabel(Sender).caption),nil, nil, SW_SHOW)
end;

end.
[/sourcecode]


Download

Download contoh aplikasi 332KB [ sudah menyertakan ZLIB Compression Library]

Download Binary - 230KB
Download Source - 60KB

Download Binary - 230KB
Download Source - 60KB

Dan seperti biasa, Anda harus mengubah ekstensi file hasil download dari .PPT ke .ZIP. Pastikan Anda terhindar dari ancaman virus, trojan dan sebagainya. Silahkan pindai dulu file-file hasil download dengan antivirus sebelum dijalankan.

Comments