このブログでは、Brotli(ブロトリ)というGoogleのオープンソース化された高圧縮アルゴリズムのライブラリをVCLおよびFMXアプリから使用できるWINSOFT社のBrotli Compressorライブラリを紹介します。
Table of Contents
はじめに
DelphiおよびC++Builderを使用しているほとんどの開発者は、標準提供されているコンポーネントとライブラリを利用してファイルの圧縮や解凍を行っています。 例えば、gzipとdeflateのデータ圧縮アルゴリズムをサポートしているSystem.Zlibユニットは、.zipアーカイブファイルを扱う上で非常に便利で、実際にサードパーティ製品であるIndyのTIdCompressorZLibクラスは、このSystem.Zlibユニットをベースとして実装されています。
しかし圧縮アルゴリズムは、gzipやdeflateだけではありません。 これ以外にも様々なデータ圧縮プログラムや圧縮データのフォーマットが存在します。
例えば、GoogleのMITライセンスでオープンソース化されているBrotliがあります。
Brotli(ブロトリ)とは、LZ77アルゴリズムをベースとしたデータ圧縮方式で、データフォーマットの仕様はインターネット標準である「RFC 7932」の一部として、すでにIETFによって定義されており、WOFF(Web Open Font Format) 2.0のフォント形式での圧縮方式としても採用されています。
Brotliの特徴は、広く使われてきたおなじみの圧縮アルゴリズムであるgzipと比べて、より高い圧縮率を発揮し、データの圧縮/解凍の速度は、ほぼ同程度のパフォーマンスを発揮します。
現在、Delphi/C++Builder向けにBrotli対応のライブラリは標準提供していないため、もしこのライブラリを扱いたい場合は、WINSOFT社が提供しているBrotli Compressorライブラリを利用するのが、とても簡単かつ便利です。このBrotli Compressor ライブラリは、VCL、FMXどちらのアプリにも対応しているランタイムライブラリ(RTL)です。(Brotliの圧縮ファイルの拡張子は.br)
Brotliライブラリ自体はMITライセンスなので、自由に使用・配布できますが、WINSOFT社のBrotli Compressorライブラリは商用製品となりますので、使用する際は別途ライセンスが必要です。
動作要件
- Brotliライブラリ(BrotliLib)の使用
- Windows 32-bitおよびWindows 64-bitをサポート
- Delphi/C++Builder 6 – 10.4で利用可能
※Brotli Compressorライブラリは、Windows専用でmacOS、iOS、Android、Linuxには未対応
インストール
Brotli Compressorライブラリは、こちらのURLからダウンロードできます。詳しいインストールの手順は、以下のビデオをご覧ください。
注意: トライアル版で試した限りでは、Brotli Compressorライブラリは専用のインストーラーが提供されていないため、brotli.zipファイルを展開後、使用しているDelphi/C++Builderのバージョンに合わせたBrotli Compressor用のオブジェクトファイル(Brotli.dcuやBrotliAPI.dcuなど)を手動でDelphi/C++BuilderのプロジェクトのWin32/Win64のライブラリパスへ追加してください。
Brotli Compressorライブラリの使用
Brotliは、オープンソース化されている圧縮ライブラリであるため、アプリケーションから利用するためには、ターゲットプラットホームごとにビルドされたBrotliLibが必要です。WINSOFT社では、Windows向けにビルドしたbrotlilib.dllという名前のダイナミックリンクライブラリを用意しており、Brotli Compressorライブラリにバンドルしています。
brotli.zipファイルを解凍すると、以下のパスに展開されます。
Win32用:
1 |
brotli¥Library¥Win32 |
Win64用:
1 |
brotli¥Library¥Win64 |
Brotli Compressorライブラリには、主に2つのクラスがあります。
- TBrotliEncoder
- TBrotliDecoder
TBrotliEncoderは指定されたパラメータを使用してファイルをエンコード(圧縮)し、TBrotliDecoderはデコード(解凍)します。さらに、OnProgressイベントでは、解凍と圧縮の進行状況の情報を提供しています。
さらにQualityプロパティでエンコーディングの品質を設定することができます。
Brotli Compressorライブラリを利用したアプリケーションの動作は、以下のデモビデオを参照ください。
上記のデモビデオから一部抜粋したDelphiによるBrotli Compressorライブラリの簡単な使用方法は、以下の通りです。
なお、TBrotliEncoderおよびTBrotliDecoderは、ビジュアルコンポーネントではないため、ツールパレットには表示されません。通常のRTLと同様にソースコードで直接定義してください。
(1) uses句にBrotliを追加する
(2) エンコードとデコードを実行する設計画面の例は、以下の通りです。
(3)Brotliのエンコード処理を実装する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
InputStream := TFileStream.Create(EditFileName.Text, 0); try OutputStream := TFileStream.Create(ChangeFileExt(EditFileName.Text, '.br'), fmCreate); try with TBrotliEncoder.Create do try if RadioButtonGeneric.IsChecked then Mode := emGeneric else if RadioButtonText.IsChecked then Mode := emText else Mode := emFont; Quality := Round(TrackBarQuality.Value); OnProgress := Self.OnProgress; Compress(InputStream, OutputStream); finally Free; end; finally OutputStream.Free; end; finally InputStream.Free; end; |
(4)Brotliのデコード処理を実装する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
InputStream := TFileStream.Create(EditFileName.Text, 0); try if CheckBoxCheckIntegrity.IsChecked then OutputStream := nil else OutputStream := TFileStream.Create(ChangeFileExt(EditFileName.Text, '.uncompressed'), fmCreate); try with TBrotliDecoder.Create do try OnProgress := Self.OnProgress; Decompress(InputStream, OutputStream); finally Free; end; finally OutputStream.Free; end; finally InputStream.Free; end; |
上記のコード例のようにBrotli Compressorライブラリの利用方法は、ファイル選択処理と入出力ストリームを実装するだけなので、とても簡単です。もし興味がありましたら、是非お試しください!
Brotli Compressorライブラリは、WinSoft社の製品です。この記事に記載された機能を利用するには、WinSoft社のサイトからこのライブラリを購入する必要があります。このライブラリに関するサポートは、WinSoft社によって提供されます。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition