Hatena::ブログ(Diary)

ゲームとかプログラムとかパソコンとか このページをアンテナに追加 RSSフィード

2009-08-02

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