2009-08-02
■[photoshop]PSDデータのフォーマット
#最終更新日2010/03/14
PSDファイルの構成
PSDファイルは、先頭から以下の順で構成されている。
値はビッグエンディアンで格納されているのでリトルエンディアンへの変換が必要
[Header] [Color Mode Data Block] [Image Resources Block] [Layer and Mask Information Block] [Image Data]
Header
| [4byte] Signature "8BPS"が入ってるらしい | [2byte] Version バージョン | [6byte] Reserved 0で無いといけない | [2byte] channels カラーチャンネル数 (例えば、RGBAだと4) | [4byte] rows 画像の高さ | [4byte] columns 画像の幅 | [2byte] Depth 1pixelのデータ深度 | [2byte] color_mode カラーモード
- カラーモード
Color Mode Data Block
[4byte] color_mode_data
Image Resource Block
[4byte] block_length Image Resource Blockのサイズ ・・・
古いPhotoshopでMac向けの環境で使用してるところで、あまり意味の無いところらしい。
Layer and Mask Information Block, Image Data
| [4byte] block_length Layer and Mask Information Blockのサイズ | [4byte] nSize ここからレイヤー情報の終わりまでのサイズ | [2byte] layer_num レイヤー数 負の数で入ってることもあるので絶対値をとる。 | レイヤー数分繰り返し | | [4byte] Top レイヤー上端位置 | | [4byte] Left レイヤー左端位置 | | [4byte] Bottom レイヤー下端位置 | | [4byte] Right レイヤー右端位置 | | [2byte] Channels レイヤーのチャンネル数 | | チャンネル数分繰り返し | | | [2byte] ChannelID チャンネルID | | | [4byte] LengthOfChannelData チャンネルデータ | | ・・・ | | [4byte] Blend Mode Signature "8BIM" | | [4byte] Blend Mode Key [char]x4 *後述 | | [1byte] Opacity 0-255 | | [1byte] Clipping 0のときbase 1のときnon-base | | [1byte] LayerFlags レイヤー情報フラグ | | [1byte] Padding 0が入ってる | | [4byte] ExtraDataSize ここからレイヤー情報の最後までのサイズ | 以下レイヤーマスクのデータ | | [4byte] Size レイヤーマスクデータのサイズ | | | [4byte] Top | | | [4byte] Left | | | [4byte] Bottom | | | [4byte] Right | | | [1byte] DefaultColor | | | [1byte] Flags | | if(Size == 20) | | | [2byte] Padding | | if(Size == 36) | | | [1byte] Flags2 | | | [1byte] maskBg | | | [4byte] OtherTop | | | [4byte] OtherLeft | | | [4byte] OtherBottom | | | [4byte] OtherRight | | ・・・ | 以下Blending Ranges | | [4byte] Size Blending Rangesのデータサイズ | | ・・・ | 以下Name | | [1byte] name_length | | ・・・ | | [時々ここに2byteのpaddingが入る。] | 以下Layer Resources | | [4byte] Signature "8BIM" | | [4byte] tag | | ・・・ レイヤー数分繰り返し | チャンネル数分繰り返し | | [2byte] compression | | if(compression == 1) | | レイヤー高さ分繰り返し | | | [l2byte] RLE幅長さ | | ・・・ | | | [画素データ] | | ・・・ | 以下マスクデータ | | [2byte] compression | | if(compression == 1) | | | [2byte] header | | ・・・ | | | [RLE画素データ] | ・・・ マージ画像 | [2byte] compression | if(compression == 1) | チャンネル数分繰り返し | | レイヤー高さ分繰り返し | | | [2byte] RLE幅長さ | | ・・・ | | | [RLE画素データ] | ・・・
- Blend Mode Key
- norm Normal
- dark Darken
- lite Lighten
- hue Hue
- sat Saturation
- colr Color
- lum Luminosity
- mul Multiply
- scrn Screen
- diss Dissolve
- over Overlay
- hLit Hard light
- sLit Soft light
- diff Difference
- compression
- 0 None
- 1 Rle
- 2 ZipNoPrediction
- 3 ZipPrediction
- 4 Jpeg
- ChannnelID
- -2 Mask
- -1 Alpha
- 0 Red
- 1 Green
- 2 Blue