【データ圧縮2】PNGファイル形式解析

PNG ファイル形式の概要

PNGの正式名称はPortable Network Graphic Format(PNG)で、ビットマップファイル(ビットマップファイル)の保存形式で「ピン」と読みます。

PNG ファイルは、PNG ファイルのロゴとデータ ブロック (チャンク) の 2 つの部分で構成されます。
PNG ファイル フラグの役割は、現在のファイルが PNG ファイルであるかどうかを識別することです。データ ブロックは、クリティカル データ ブロック (クリティカル チャンク) と補助データ ブロック (アンシラリー チャンク) の 2 つのカテゴリに分類されます。クリティカル データ ブロックは PNG で必要です。ファイル、補助データ ブロックはデータ ブロックはオプションです。

ファイル構造

PNG ファイルの場合、ファイル ヘッダーは常に固定バイトで記述されます: 10
進数 137 80 78 71 13 10 26 10
16 進数 89 50 4E 47 0D 0A 1A 0A

次の図に示すように PNG ファイルを開くと、ファイル ヘッダーが 89 50 4E 47 0D 0A 1A 0A であることがわかり、これもファイルが PNG ファイルであることを証明しています。
ここに画像の説明を挿入

PNGデータのブロック構造

PNG データ ブロックは、クリティカル チャンクと補助チャンクの 2 つのカテゴリに分類されます。

キー データ ブロックは、ファイル ヘッダー データ ブロック (IHDR)、パレット データ ブロック (PLTE)、画像データ ブロック (IDAT)、および画像終了データ (IEND) の 4 つの部分で構成されます。パレット データ ブロック (PLTE) は、画像の色深度に応じてオプションです。

PNG ファイル形式の仕様では、10 個の補助データ ブロックが指定されています。

名前
背景色データブロック bKGD(背景色)。
原色および白色度データ ブロック cHRM (原色色度および白色点)。
イメージガンマデータブロックgAMA(イメージガンマ)。
画像ヒストグラムデータブロックhIST(画像ヒストグラム)。
物理ピクセル サイズ データ ブロック pHY (物理ピクセル寸法)。
サンプル有効ビットデータブロック sBIT(有効ビット)。
文字情報データブロックtEXt(文字データ)。
画像の最終変更時刻データ ブロック tIME (画像の最終変更時刻)。
画像透明度データブロック tRNS (透明度)。
圧縮テキスト データ ブロック zTXt (圧縮テキスト データ)。

データブロック構成構造:

名前 バイト 説明する
長さ(長さ) 4バイト データ ブロック内のデータ フィールドの長さを指定します。その長さは (2^31-1) バイトを超えません。
Chunk Type Code (データブロックのタイプコード) 4バイト データ ブロック タイプ コードは、ASCII 文字 (A~Z および a~z) で構成される「データ ブロック シンボル」です。
チャンクデータ 可変長 Chunk Type Codeで指定したデータを格納する
CRC (巡回冗長検査) 4バイト エラーの有無を検出するために使用される巡回冗長コードを格納します

事例分析

PNG ファイル test.png を開きます。
ここに画像の説明を挿入
Visual Studio 2019 を使用してファイルをバイナリ モードで開きます。
ここに画像の説明を挿入

主要データブロック分析

(1) IHDRデータブロック

ここに画像の説明を挿入
00 00 00 0D -----IHDR ヘッダー ブロックの長さが 13
49 48 44 52 であることを示します -----IHDR 識別
00 00 03 06 ------画像幅、774 ピクセル
00 00 03 06 --- ---画像の高さ、774 ピクセル
08 ------------------色深度、2^8=256、つまり、これは 256 色の画像です
02 ------------------カラー タイプ、グレースケール イメージ
00 ------------------PNG 仕様では、これは常に 0 であると規定されています(0 ではありません。値は将来のより良い圧縮方法のために予約されています)、圧縮方法 (LZ77 派生アルゴリズム)
00 ------------------PNG 仕様では次のように規定されています。ここでは常に 0 です (ゼロ以外の値は、将来のより優れた圧縮方法のために予約されています)。これは、圧縮方法 (LZ77 派生アルゴリズム) が
00 -----------------であることを示します。 - ノンインターレーススキャン
C7 A4 04 83 -----CRC チェックコード

(2) PLTEパレットデータブロック

ここに画像の説明を挿入
PLTE データブロックは、画像を定義するパレット情報であり、1 ~ 256 個のパレット情報を含めることができ、各パレット情報は 3 バイトで構成されます。

この例では、色深度が 8 の場合、色の数は 2^8=256 を超えず、パレットの長さは 1216=192=364 (3 の倍数) になります。

(3) IDAT画像データブロック

ここに画像の説明を挿入
E7 14 EE 56 -----------データ長は 3876908630 バイトです

60 2F FD FA ----------- IDATロゴ

20 20... --------------圧縮データ

(4) IEND画像終了データ

ここに画像の説明を挿入
00 00 00 00 ------------- データ部分の長さが 0 であること、つまり、このデータ ブロックにはデータ部分がないことを示します
49 45 4E 44 -------- ----- データ型 コード、49 45 4E 44 は IEND ロゴ
AE 42 60 82 -------------CRC チェック コード

補助データブロック分析

(1) gAMA画像yデータブロック

ここに画像の説明を挿入

(2) cHRM ベースカラーおよび白色点データブロック

ここに画像の説明を挿入

(3) bKGD背景色データブロック

ここに画像の説明を挿入

(4) pHYの物理ピクセルサイズデータブロック

ここに画像の説明を挿入

(5) tIME 画像最終更新時刻データブロック

ここに画像の説明を挿入

参考文献

【1】データ圧縮ジョブ 2: PNG ファイル形式分析_Liang Qirong のブログ - CSDN ブログ
【2】PNG ファイル形式分析_Messi0822 のブログ - CSDN ブログ
【3】詳細な PNG ファイル構造 - Angel_Kitty- 博客园(cnblogs.com)

おすすめ

転載: blog.csdn.net/ppinecone/article/details/124375695