Prompt

画像ファイル形式 [.jpg, .png, .bmp] のそれぞれの内部フォーマットを比較して解説ちょ

いい質問だね!画像ファイル形式の内部フォーマットは、圧縮方式やデータの持ち方がそれぞれ違うから、用途によって使い分けられるんだ。


1. BMP (Bitmap)

無圧縮のラスター画像フォーマットだよ。

  • 内部フォーマット:

    • ファイルヘッダー: ファイルの種類やサイズといった基本情報。

    • 情報ヘッダー: 画像の幅、高さ、色深度(1ピクセルあたりのビット数)などの詳細情報。

    • ピクセルデータ: 各ピクセルの色情報が上から下、左から右へと生のデータとしてそのまま並んでいる。

  • 特徴: 圧縮されていないから画質の劣化が一切ないけど、ファイルサイズが非常に大きくなる。透明度を扱えないのも特徴だ。

  • 用途: 画像編集の途中段階や、画質を最優先する場合。


2. PNG (Portable Network Graphics)

可逆圧縮のラスター画像フォーマット。

  • 内部フォーマット:

    • シグネチャ: ファイルがPNGであることを示す8バイトの識別子。

    • チャンク: ヘッダーや画像データ、メタデータなどがチャンクというブロックに分割されて格納される。

      • IHDRチャンク: 画像の幅、高さ、色深度などのヘッダー情報。

      • IDATチャンク: Deflateアルゴリズムで圧縮された実際のピクセルデータ。

      • IENDチャンク: ファイルの終端を示す。

  • 特徴: 可逆圧縮だから、画質を損なわずにファイルサイズを小さくできる。さらに、アルファチャンネルをサポートしているため、透明度を扱えるのが大きな利点だ。

  • 用途: ロゴやアイコン、スクリーンショット、透明な背景が必要なWeb画像など。


3. JPG (Joint Photographic Experts Group)

非可逆圧縮のラスター画像フォーマット。

  • 内部フォーマット:

    • セグメント: ファイルの始まりと終わりを示すマーカーと、その間に画像データやメタデータがセグメントとして格納される。

    • 画像データ:

      • 画像を8x8ピクセルのブロックに分割。

      • 色の情報をRGBから**輝度(Y)と色差(Cb, Cr)**に変換。人間の目は色差より輝度の変化に敏感な性質を利用する。

      • 色差データは間引かれる(ダウンサンプリング)。

      • 各ブロックが**離散コサイン変換(DCT)**によって周波数成分に変換され、高い周波数成分(細かい模様など)が量子化によって切り捨てられる。これが非可逆圧縮の核心だ。

      • 最後にハフマン符号化などでさらに圧縮される。

  • 特徴: 非常に高い圧縮率を誇り、写真のように色の変化が滑らかな画像に特に適している。非可逆圧縮のため、保存するたびに画質が少しずつ劣化する。透明度はサポートしていない。

  • 用途: デジタルカメラの写真、Web上の写真など、画質よりもファイルサイズを小さくしたい場合。