RunLengthDecode
RunLengthDecodeは、同一バイト値の連続したシーケンスをエンコードすることでファイルサイズを削減する、PDF文書で使用される可逆データ圧縮フィルタです。
RunLengthDecodeは、同一バイト値の連続したシーケンスをエンコードすることでファイルサイズを削減する、PDF文書で使用される可逆データ圧縮フィルタです。 ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) で定義されているように、PDFファイルのストリームデータをエンコードする際に利用可能な標準圧縮フィルタの1つです。このフィルタは、モノクロ画像や大きな均一色領域を持つシンプルなグラフィックスなど、繰り返し値の長い連続を含むデータに特に効果的です。
RunLengthDecodeは、ランレングスエンコーディング(RLE)を実装するストリームフィルタです。RLEは、連続する同一バイトのシーケンスをカウント値と繰り返されるバイトの単一インスタンスに置き換える、基本的なデータ圧縮形式です。PDF文書では、このフィルタはストリーム辞書の/Filterエントリに/RunLengthDecodeという名前を指定することで使用されます。
FlateDecode(ZLIB/Deflate圧縮を使用)などのより高度な圧縮アルゴリズムとは異なり、RunLengthDecodeはより単純なアルゴリズムを使用しており、エンコードとデコードが高速ですが、複雑なデータでは通常、圧縮率が低くなります。このフィルタは、他のPDF圧縮フィルタと比べて、そのシンプルさと、汎用的なデータ圧縮ではなく同一値の長い連続を持つデータでの最適なパフォーマンスが特徴です。
PDF生成または操作を行う開発者にとって、RunLengthDecodeを理解することは、いくつかの理由で重要です:
- パフォーマンスの最適化: シンプルなモノクロ画像やFAXのような文書を扱う場合、RunLengthDecodeは、妥当なファイルサイズ削減を実現しながら、より複雑なアルゴリズムよりも高速な圧縮と展開を提供できます。
- レガシー互換性: 多くの古いPDF文書やワークフローでRunLengthDecodeが使用されているため、開発者は既存のPDFを処理する際にこのフィルタをデコードできる必要があります。
- 適切なフィルタ選択: RunLengthDecodeと他の圧縮フィルタをいつ適用すべきかを知ることで、開発者はコンテンツの特性に基づいて最適に圧縮されたPDFファイルを作成できます。
- 実装のシンプルさ: アルゴリズムが単純明快であるため、完全な圧縮ライブラリが利用できない、または望ましくない環境で有用です。
RunLengthDecodeアルゴリズムは、 ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) で規定されているシンプルなエンコーディングスキームを使用してバイトシーケンスを処理します:
エンコーディングプロセス:
- エンコーダは入力データから同一バイトの連続を検出します
- 2から128バイトの同一バイトの連続は、長さバイト(257 - 連続長)とそれに続く繰り返されるバイト値としてエンコードされます
- 1から128バイトの非繰り返しバイトのシーケンスは、長さバイト(連続長 - 1)とそれに続くリテラルバイト自体としてエンコードされます
- データ終了マーカー(バイト値128)がエンコードされたストリームを終了します
デコーディングプロセス:
- デコーダはエンコードされたストリームから長さバイトを読み取ります
- 長さバイトが0-127の場合: 次の(長さ + 1)バイトをそのまま出力に書き込みます
- 長さバイトが129-255の場合: 次のバイトを読み取り、出力に(257 - 長さ)回繰り返します
- 長さバイトが128の場合: データ終了マーカーであり、デコードを停止します
主な特徴:
- アルゴリズムは決定論的かつ可逆であり、元のデータの完全な再構築を保証します
- 圧縮率は入力データの特性によって大きく変化します
- 最悪のケース(連続のない変化に富んだデータ)では、エンコードされた出力が入力よりわずかに大きくなる可能性があります
- 最適な圧縮のため、フィルタパイプラインで他のフィルタと組み合わせて使用されることがよくあります
- FlateDecode – ZLIB/Deflateアルゴリズムを使用するより高度な圧縮フィルタで、汎用データに対してより優れた圧縮を提供します
- Stream Object – 辞書と関連するバイナリデータで構成されるPDFオブジェクトで、RunLengthDecodeなどのフィルタが適用されます
- Filter – 圧縮、展開、エンコーディングなどの目的でストリームデータに適用される処理操作
- LZWDecode – Lempel-Ziv-Welchアルゴリズムに基づく別の圧縮フィルタで、画像データに一般的に使用されます
- ASCIIHexDecode – バイナリデータをASCII16進数表現に変換するエンコーディングフィルタで、圧縮フィルタと組み合わせて使用されることがよくあります
- (N.A.) (2020)
- (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html
