PSDデータのフォーマット

Posted on Sun 02 August 2009 in ペイントツール

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 カラーモード

  • カラーモード
    • 0 Bitmap(monochrome)
    • 1 Gray-scale
    • 2 Indexed color(palette color)
    • 3 RGB color
    • 4 CMYK color
    • 7 Multichannel color
    • 8 Duotone(halftone)
    • 9 Lab color

Color Mode Data Block

[4byte] color_mode_data
  • カラーモードがIndexed colorのときは、768じゃないといけない。
  • カラーモードがDuotoneのときは、おそらくスクリーンパラメータやその他の情報に関連するらしい。

Image Resource Block

[4byte] block_length Image Resource Blockのサイズ
・・・

古いPhotoshopMac向けの環境で使用してるところで、あまり意味の無いところらしい。

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
  • LayerFlags
    • 1bit目
    • 2bit目 レイヤーが不可視なら1、そうでないなら0
    • 3bit目
    • 4bit目
    • 5bit目 レイヤーセットなら1、そうでないなら0
    • 6bit目
    • 7bit目
    • 8bit目
  • compression
    • 0 None
    • 1 Rle
    • 2 ZipNoPrediction
    • 3 ZipPrediction
    • 4 Jpeg
  • ChannnelID
    • -2 Mask
    • -1 Alpha
    • 0 Red
    • 1 Green
    • 2 Blue

参考URL

http://www.fileformat.info/format/psd/egff.htm http://tmp.junkbox.info/e40.html