PNG-GIFではありません!

良い一日!

PNGファイルの仕組みを知りたいと思ったことはありませんか? いや? とにかく教えます

PNG(Portable Network Graphics)形式はGIFの代替となるために1995年に発明され、1996年にバージョン1.0のリリースで既にW3Cにより本格的なネットワーク形式として推奨されました。 今日、PNGはWebグラフィックの主要な形式の1つです。



カットの下には、PNGファイルの構造の一般的な説明、一定数の回路図画像、準備があります 16進エディタで、そしてもちろん、仕様へのリンクで。



一般的な構造



最も一般的な形式のPNG構造を次の図に示します。



つまり、ファイルは署名といくつかのブロック(チャンク、チャンク)で構成され、各ブロックにはいくつかの情報が含まれています(KO!に感謝)。 しかし、署名がチャンクの1つと見なされないのはなぜですか? よく見てみましょう。



ファイル署名


PNGファイルの署名は常に同じで、8バイトで構成され、(16進レコードで)を表します

89 50 4E 47 0D 0A 1A 0A


これはどういう意味ですか?





チャンク


チャンクは、ファイルを構成するデータブロックです。 各チャンクは4つのセクションで構成されます。



これらのセクションを順番に分析します。



長さ


まあ、長さで、すべてが明確に見える。 データブロックの長さの単なる数値。



タイプ(名前)


タイプではもう少し面白いです。 タイプは、大文字と小文字が区別される4つのASCII文字です。 チャンク名の文字レジスタ(数値レコードの5番目のビット)は、理由により異なります-これらは、デコーダに追加情報を伝えるフラグです。



理解を深めるために、テキストを含むチャンクの例を使用してフラグを見てみましょう。





以下は、簡単な説明付きのチャンクタイプのリストです。

重要なチャンク





補助チャンク



詳細は仕様に記載されています。



CRC


CRC-32チェックサム。 ところで、先日、Windowsでの計算に関するトピックがありました。



最小PNG



一般的な構造が整理されています。 次に、必要なチャンクのコンテンツを分析します。 しかし、それらのうちどれが必須であるか(クリティカルではない、デコーダーによって認識される必要があり、各ファイルに存在しない)、および最小のPNGファイルはどのように見えますか? そして、ここに方法があります:





Ihdr


IHDRのデータブロックには、次のフィールドが含まれています。



Adam7インターレースは、ウィキペディアの画像を完全に示しています(はい、PNGに関する記事のGIF)。

画像



IEND


ファイルの終わりを示します。このチャンクのデータブロックには何も含まれていません。



IDAT


ヘッダーの圧縮方法フィールドに従ってエンコードされたデータが含まれます。 デコードアルゴリズムは、この記事の範囲を超えています(ただし、必要に応じて、次の記事に記載することもあります)が、ここでは非常によく(そしてロシア語で)説明しています



したがって、最も単純なPNGファイル(たとえば )は次のとおりです。





おわりに



この記事を書くとき、私は読者にPNGファイルの構造に関する一般的な知識を与えるタスクを設定しました。より深い理解のために、 仕様を読むことが推奨されます。



JPEG構造に関するハブのトピック: habrahabr.ru/blogs/algorithm/102521

GIF構造に関するハブのトピック: habrahabr.ru/blogs/algorithm/127083



ご清聴ありがとうございました。どんな批判も喜んでいます!



All Articles