Adobe Photoshop_ 2.5 File Format =A81992 トーマス ノール(Thomas Knoll) =A81993 アドビシステムズ(Adobe Systems, Inc.) Photoshop 2.5形式は、速くそして、簡単に読み書きできるように設計され、 またその一方でPhotoshop2.0形式の問題も解決されています。 (1) データ構造が一つで、クロスプラットフォームに対応しています。 (2) 圧縮オプションにRLEがあり、簡単な画像やマスクチャネルは、よりコンパクトに保存できます。 マッキントッシュのファイル種別コードは、'8BPS'です。DOSマシンでの拡張子は、'PSD'です。 全ての情報は、ビッグエンディアンで保存されます。 リトルエンディアンマシン(インテルのマシン)では、読み書きの際にスワップ処理を行なう必要があります。 以下のセクションでは、PSDファイルのデータ構造の書式について説明しています。 1. ☆シグネチャ(Signature) (4 バイト) 常にPSDファイルのシグネチャは、'8BPS'です。 シグネチャの値が'8BPS'でない場合は、読みこみをキャンセルしなくてはいけません。 2. ☆バージョン(Version) (2 バイト) 常にバージョンの値は、1です。 バージョンの値が1以外のときは、読みこみをキャンセルしなくてはいけません。 3. リザーブ(Reserved) (6 バイト) 画像ローダーは、この領域を無視しなくてはいけません。 書きこみ処理では、ここの値を0で埋める必要があります。 4. ☆チャネル(Channels) (2 バイト) アルファチャンネルを含むイメージ中のチャンネルの数です。 Photoshop 2.5は、1から16の領域をサポートします。(追記:Photoshop 3.0は、1から24の領域をサポートします。) 5. ☆列(Rows) (4 バイト) 画像の高さ(ピクセル数)です。Photoshop 2.5は、1から30000の値をサポートします。 6. ☆カラム(Columns) (4 バイト) 画像の幅(ピクセル数)です。Photoshop 2.5は、1から30000の値をサポートします。 7. ☆深度(Depth) (2 バイト) この値は、ビット/チャネルを表します。Photoshop 2.5は、1と8の値をサポートします。 (追記:Photoshop 3.0は、1,8,16の値をサポートします。) 8. ☆モード(Mode) (2 バイト) カラーモードを表します。 サポートする値とカラーモードは、以下のとおりです。 Bitmap = 0 Grayscale = 1 Indexed = 2 RGB = 3 CMYK = 4 Multichannel = 7 Duotone = 8 Lab = 9 9. ☆モードデータ(Mode Data) (4 バイト + 可変長領域) カラーモードがIndexed(2)、Duotone(8)のときのカラーデータ領域です。 最初の4バイト部分は可変長領域の長さをあらわします。 Indexed(2)のとき、可変長領域の長さをあらわす値は768になります。 Duotone(8)のカラーデータについては、Duotone詳説を参照してください。 画像ローダーは、Dutone(8)をグレイスケールとして扱うことができます。 and keep the duotone specification around as a black box for use when saving the file. Indexed(2)、Duotone(8)以外のカラーモードでは、可変長領域を表す値は0です。 10. 画像リソース(Image Resources) (4 バイト + 可変長領域) Photoshop 2.5の画像リソースブロックです。このブロックの形式は別文書です。 このブロックには、画像リソースや、ペン、パスといった情報が含まれます。 11. リザーブデータ(Reserved Data) (4 バイト + 可変長領域) PSD形式を将来、拡張するために予約された領域です。画像ローダーは、この領域を無視しなくてはいけません。 書きこみ処理では、レングスに0を設定する必要があります。 (追記:PhotoShop 3.0では、このエリアにレイヤ&マスク情報が格納されてます。) 12. ☆圧縮方法(Compression) (2 バイト) この値が0のとき、画像データは圧縮されていません。1のとき画像データはRLEで圧縮されています。 13. ☆画像データ(Image Data) (可変長) 画像データがプレーン毎に用意されています。 例えば、赤成分の全データ、緑成分の全データ、などなど・・ 各プレーンは、ライン毎に蓄積され、パディングバイトは含まれません。 もし、圧縮方法の値が0のとき、画像データは圧縮されていない画像データです。 もし、圧縮方法の値が1のとき、画像データはすべてのスキャンライン(列xチャネル)のバイトカウントで始まります。 バイトカウントは2バイト構成です。 RLE圧縮データは、各スキャンライン毎に別々に圧縮されています。 RLE圧縮方法は、’Macintosh ROM’処理のPackBits圧縮アルゴリズムと同一です。 そのアルゴリズムは、TIFFの標準でもあります。 ------------------------------------------------------------------------------- 個人的メモ モードデータがパレットデータを持っているので、この部分の先頭4バイトが0なら パレットデータは存在せず、逆にパレットを使用する画像は、続く可変長領域のデータを 参照してパレットを構築する。 ちなみに、パレットデータもRRR GGG BBB順。 画像データがRLEで圧縮されてる場合、RLEで圧縮された各ラインのデータ長を 参照しながらデータ読み込み、RLEデコードを行う必要がある。 200x300の24bit画像では、各ラインのデータを保持しているエリアは、高さxチャネルxSizeOf(WORD)で、 200x3x2となる。 このデータ長を保持したエリア以降のデータが真の画像データとなる。