PhotoShop文件格式解析.docx
《PhotoShop文件格式解析.docx》由会员分享,可在线阅读,更多相关《PhotoShop文件格式解析.docx(50页珍藏版)》请在冰豆网上搜索。
PhotoShop文件格式解析
PSD文件解析
(lzgame整理)
一、PSD文件结构为:
文件头信息
颜色映射表
图像资源
图层与蒙版信息
图像数据
二、PSD文件头信息结构
typedefstructtagPSD_FILE_HEADER
{
DWORDsignature;
WORDversion;
WORDreserved1;
WORDreserved2;
WORDreserved3;
WORDnumber_of_channels;
DWORDheight_of_image;
DWORDwidth_of_image;
WORDdepth;
WORDcolor_mode;
}psd_file_header;
字段名
类型
大小
(字节)
描述
signature
char
4
签名:
总是为'8BPS'
version
short
2
版本:
总是为1(**PSB**版本为2)
reserved1-3
6
保留:
必须为0
number_of_channels
short
2
图片通道数量,包含所有颜色通道数和alpha通道数。
支持范围为1-56
height_of_image
int
4
图片高度像素数,支持范围为1-30,000.(**PSB**最大为300,000.)
width_of_image
int
4
图片宽度像素数,支持范围为1-30,000.(*PSB**最大为300,000)
depth
short
2
每像素字节数:
支持的值为1,8,16.
color_mode
short
2
颜色模式.支持的值有:
Bitmap=0;Grayscale=1;Indexed=2;RGB=3;CMYK=4;Multichannel=7;Duotone=8;Lab=9.
三、PSD颜色映射表,在photoshop中仅有索引色模式和双色调模式有颜色映射表,数据格式如下:
1.4字节(int):
颜色映射表三色总颜色数
2.颜色映射表数据区:
颜色映射表中保存的颜色数量为“三色总颜色数/3”,在颜色映射表中每个颜色的RGB三色被分开保存,每个颜色值2字节,依次为R通道数据区、G通道数据区、B通道数据区。
可以计算得到总数据长度为“颜色映射表三色总颜色数*2字节”
四、PSD图像资源,起始为4字节的图像资源数量(int),然后为图像资源数据区,图像资源的数据结构为:
typedefstructtagPSD_IMAGE_RESOURCE{
DWORDsignature;
WORDUniqueID;
BYTEnNameSize;
BYTE*name;
DWORDnResourceSize;
BYTE*data;
}psd_image_resource;
字段名
类型
大小
(字节)
描述
signature
Int
4
签名,总是为'8BIM'
UniqueID
Short
2
资源唯一索引号
nLength
Byte
1
名称字符串长度
name
Char
nLength
名称,Pascal字符串,长度如果为奇数,在字符串末尾追加1个字节“0”
nSize
Int
4
实际资源数据字节数
Data
Byte
nSize
实际图像资源数据,长度如果为奇数,在图像资源数据末尾追加1个字节“0”
已知资源ID介绍:
1.ID1005:
图像分辨率,共16字节
1)4字节(int):
水平分辨率(像素/英寸)
2)2字节(short):
画布显示的水平分辨率单位,1:
像素/英寸,2:
厘米/英寸
3)2字节(short):
画布显示的宽度单位,1:
英寸,2:
厘米,3:
点,4:
派卡,5:
列
4)4字节(int):
垂直分辨率(像素/英寸)
5)2字节(short):
画布显示的垂直分辨率单位,1:
像素/英寸,2:
厘米/英寸
6)2字节(short):
画布显示的高度单位,1:
英寸,2:
厘米,3:
点,4:
派卡,5:
列
2.ID1006:
Alpha通道的名称列表,以Pascal字符串存储,即通道名称字符串长度(1字节)+通道名称(最大255字节)。
可以通过计算名称数量获得总alpha通道数。
3.ID1007:
颜色通道信息
1)10字节:
颜色通道对应的颜色值:
2)2字节(short):
颜色值使用的颜色空间类型,颜色空间表示了PhotoShop把不同颜色模式转换为屏幕RGB显示模式的取值方式。
颜色空间类型定义为:
typedefenum{
psd_color_space_dummy=-1,//没有颜色空间
psd_color_space_rgb,//RGB颜色空间
psd_color_space_hsb,//HSB颜色空间
psd_color_space_cmyk,//CMYK颜色空间
psd_color_space_pantone,//潘通颜色空间
psd_color_space_focoltone,//FOCOLTONE颜色空间
psd_color_space_trumatch,//TRUMATCH颜色空间
psd_color_space_toyo,//TOYOColorFinder颜色
psd_color_space_lab,//LAB颜色空间
psd_color_space_gray,//灰度颜色空间
psd_color_space_wide_cmyk,//宽CMYK颜色空间
psd_color_space_hks,//HKS颜色空间
psd_color_space_dic,//DIC颜色空间
psd_color_space_total_ink,//总墨量颜色空间
psd_color_space_monitor_rgb,//显示器RGB颜色空间
psd_color_space_duotone,//双色调颜色空间
psd_color_space_opacity//不透明颜色空间
}psd_color_space;
3)4x2字节(short):
颜色值
4)2字节(short):
不透明度,取值范围为0-100
5)1字节(byte):
显示方式,0:
选中,1:
保护
6)1字节:
可能是用于多通道颜色模式,通常为0
4.ID1008:
标题,以Pascal字符串存储,即标题长度(1字节)+标题(最大255字节)
5.ID1024:
当前图层ID号(2字节),为0表示最后一层
6.ID1026:
图层组信息,每个图层组ID占用2个字节,可通过计算该资源的数据长度/2得到图层组总数量
7.ID1033:
缩略图资源结构,同ID1036;(Photoshop4.0)
8.ID1036:
缩略图资源结构,缩略图信息由28字节的头信息+JFIF格式的RGB图像数据组成。
(Photoshop5.0以上)
1)4字节(int):
缩略图格式,1为kJpegRGB,也支持kRawRGB(0).
2)4字节(int):
缩略图宽度像素数
3)4字节(int):
缩略图高度像素数
4)4字节(int):
每行字节数=(宽度像素数*每像素字节数+31)/32*4.
5)4字节(int):
总字节数=每行字节数*高度*面板数量
6)4字节(int):
每行后面不用的字节,用于一致性检查
7)2字节(short):
每像素字节数,总是为24
8)2字节(short):
面板数量,总是为1
9)剩余字节:
JFIF图像数据
9.ID1034:
Copyright标记(2字节)。
Photoshop(v4.0以上)
10.ID1037:
全局光照角度(4字节(int)),范围为0-359,用于图层效果,默认为30。
(Photoshop5.0以上)
11.ID1042:
显示图层效果标记(1字节),全局标记,用于显示或隐藏所有的图层效果。
(Photoshop5.0以上)
12.ID1045:
Alpha通道的Unicode名称列表(Unicode字符串,每个字符由2个字节组成),存储格式为:
通道Unicode名称字符串长度(4字节)+通道Unicode名称(字符串长度*2字节)。
可以通过计算名称数量获得总alpha通道数。
(Photoshop5.0以上)
13.ID1046:
索引颜色表颜色数量(2字节)。
(Photoshop6.0以上)
14.ID1047:
索引颜色表中透明色的索引号(2字节)。
(Photoshop6.0以上)
15.ID1049:
全局光源高度(GlobalAltitude)(4字节)。
(Photoshop6.0以上)
16.ID1053:
Alpha通道ID号列表(4字节/ID号),可以通过计算ID号数量获得总alpha通道数。
(Photoshop6.0以上)
17.ID1057:
(Photoshop6.0)版本信息
1)4字节(int):
版本号
2)1字节(bool):
有真实的图像混合数据标记
3)4字节(int):
作者名称Unincode字符串长度
4)2字节(wchar)*作者名称字符串长度:
作者名称
5)4字节(int):
读者名称Unincode字符串长度
6)2字节(wchar)*读者名称字符串长度:
读者名称
7)4字节(int):
当前文件版本
18.ID2000-2998:
Photoshop路径资源,ID范围为2000-2998。
路径资源数据由26字节的资源块组成,总长度为26x路径资源数量
起始的2字节(short)为路径资源类型,余下24字节根据类型,注释如下:
1)类型0:
关闭的路径;
类型3:
打开的路径;
a)2字节(short):
路径中的贝塞尔节点数量
b)22字节:
总是为0
2)类型1:
关闭的贝塞尔节点,连接;
类型2:
关闭的贝塞尔节点,未连接;
类型4:
打开的贝塞尔节点,连接;
类型5:
打开的贝塞尔节点,未连接;
a)4字节(int):
节点前控制点Y坐标
b)4字节(int):
节点前控制点X坐标
c)4字节(int):
节点Y坐标
d)4字节(int):
节点X坐标
e)4字节(int):
节点后控制点Y坐标
f)4字节(int):
节点后控制点X坐标
3)类型6:
路径填充规则24字节
4)类型7:
路径剪切范围
a)4字节(int):
路径剪切范围Top
b)4字节(int):
路径剪切范围Left
c)4字节(int):
路径剪切范围Bottom
d)4字节(int):
路径剪切范围Right
e)4字节(int):
路径剪切范围分辨率
f)4字节(int):
总是为0
5)类型8:
路径填充
a)2字节(short):
填充的值
b)22字节:
总是为0
19.ID2999:
EPS文件剪切路径(暂无资料)
以下为脱离了Photoshop可能就没用的图像资源:
20.ID1009:
打印边框(边界)信息
1)(2字节实际数据,2字节分数):
打印边框宽度,固定值
2)2字节(short):
打印边框单位,1为英寸,2为厘米,3为点,4为派卡,5为列
21.ID1011:
打印设置标记
1)1字节(bool):
打印标签标记
2)1字节(bool):
打印角裁剪标记
3)1字节(bool):
打印颜色条标记
4)1字节(bool):
打印套准标记
5)1字节(bool):
负片打印标记
6)1字节(bool):
药膜向下标记
7)1字节(bool):
插入说明标记
8)1字节(bool):
打印标题标记
9)1字节(bool):
打印出血标记
22.ID1032:
网格线信息(Photoshop4.0以上)
1)4字节(int):
版本号,总是为1
2)4字节(int):
水平方向网格线数量
3)4字节(int):
垂直方向网格线数量
4)4字节(int):
网格线总数(可以为0)
以下5字节/组*网格线总数
5)4字节(int):
网格线坐标列表
6)1字节(byte):
网格线类型,0为垂直网格线,1为水平网格线
23.ID1038:
颜色样板资源(Photoshop5.0以上)
1)4字节(int):
版本号,总是为1
2)4字节(int):
颜色样板数量
以下10字节/组*颜色样板数量
3)4字节(int):
颜色垂直位置
4)4字节(int):
颜色水平位置
5)2字节(short):
颜色空间类型
24.ID1050:
切片资源(Photoshop6.0以上)
1)4字节(int):
版本号,总是为6
2)4字节(int):
切片范围top
3)4字节(int):
切片范围left
4)4字节(int):
切片范围bottom
5)4字节(int):
切片范围right
6)4字节(int)+字符串长度*2:
切片资源名称Unicode字符串长度+切片资源名称
7)4字节(int):
切片数量
8)各个切片的详细信息
a)4字节(int):
切片ID
b)4字节(int):
切片组ID,为0表示不是用户切片
c)4字节(int):
关联图层数量
d)0或4字节(int):
关联图层id(仅当关联图层数量为1时存在)
e)4字节(int)+字符串长度*2:
切片名称Unicode字符串长度+切片名称
f)4字节(int):
切片类型
g)4字节(int):
切片范围left
h)4字节(int):
切片范围top
i)4字节(int):
切片范围right
j)4字节(int):
切片范围bottom
k)4字节(int)+字符串长度*2:
HTML链接地址(URL)Unicode字符串长度+HTML链接地址(URL)
l)4字节(int)+字符串长度*2:
HTML目标(Target)Unicode字符串长度+HTML目标(Target)
m)4字节(int)+字符串长度*2:
HTML图片信息文本Unicode字符串长度+HTML图片信息文本
n)4字节(int)+字符串长度*2:
HTMLAlt标记Unicode字符串长度+HTMLAlt标记
o)1字节(byte):
在单元格中显示文本的标记
p)4字节(int)+字符串长度*2:
在单元格中显示的文本Unicode字符串长度+在单元格中显示的文本
q)4字节(int):
水平对齐位置
r)4字节(int):
垂直对齐位置
s)4*1字节(byte):
读取ARGB背景颜色,依次为A-R-G-B颜色值
25.ID1054:
URL列表(Photoshop6.0以上)
1)4字节(int):
URL列表数量
2)各个URL的详细信息
a)4字节(int):
4字节简略关联标签,如:
来自切片为“slic”
b)4字节(int):
关联ID
c)4字节(int)+字符串长度*2:
链接地址(URL)Unicode字符串长度+链接地址(URL)
26.ID1058,ID1059:
EXIF数据,不包含固定格式的EXIF头信息(Photoshop7.0以上)
27.ID1062:
打印缩放信息(Photoshop7.0以上)
1)2字节(short):
打印缩放类型,0为图像居中,1为缩放以适合介质,2为用户自定义
2)4字节(float):
X坐标位置
3)4字节(float):
Y坐标位置
4)4字节(float):
打印缩放比例
28.ID1064:
像素高宽比(PhotoshopCS以上)
1)4字节(int):
版本号,总是为1
2)8字节(double):
像素高宽比,像素点的X/Y值
29.ID10000:
打印出血信息
1)2字节(short):
版本号,总是为1
2)1字节(bool):
打印中心裁剪标记
3)1字节(bool):
预留,总是为0
4)4字节(int):
读取打印出血宽度
5)2字节(short):
打印出血缩放比例
五、PSD图层与蒙版信息,数据格式如下:
1.4字节(int):
图层和蒙版信息数据总长度(PSB为8字节)
2.4字节(int):
图层信息数据长度(PSB为8字节),长度必须为偶数,否则追加1个字节“0”
以下为图层信息部分:
3.2字节(short):
图层数量
4.各图层信息数据列表,包括图层的头信息、蒙版信息、效果图层信息及设置信息,其数据格式如下:
1)4字节(int):
图层范围top
2)4字节(int):
图层范围left
3)4字节(int):
图层范围bottom
4)4字节(int):
图层范围right
5)2字节(short):
图层通道数量
6)各个图层通道的头信息,数据格式如下:
a)2字节(short):
图层通道ID。
在RGB图像中:
0表示R通道,1表示G通道,2表示B通道;在CMYK图像中:
0表示C通道,1表示M通道,2表示Y通道,3表示K通道,等等;另外-1表示透明蒙版,-2表示用户颜色通道。
b)4字节(int):
图层通道数据长度(PSB为8字节)
7)4字节(char):
混合模式签名,总是为'8BIM'
8)4字节(char):
混合模式类型,混合模式类型定义为
typedefenum{
psd_blend_mode_normal,//'norm'=normal(正常)
psd_blend_mode_dissolve,//'diss'=dissolve(溶解)
psd_blend_mode_darken,//'dark'=darken(变暗)
psd_blend_mode_multiply,//'mul'=multiply(正片叠底)
psd_blend_mode_color_burn,//'idiv'=colorburn(颜色加深)
psd_blend_mode_linear_burn,//'lbrn'=linearburn(线性加深)
psd_blend_mode_lighten,//'lite'=lighten(变亮)
psd_blend_mode_screen,//'scrn'=screen(滤色)
psd_blend_mode_color_dodge,//'div'=colordodge(颜色减淡)
psd_blend_mode_linear_dodge,//'lddg'=lineardodge(线性减淡(添加))
psd_blend_mode_overlay,//'over'=overlay(叠加)
psd_blend_mode_soft_light,//'sLit'=softlight(柔光)
psd_blend_mode_hard_light,//'hLit'=hardlight(强光)
psd_blend_mode_vivid_light,//'vLit'=vividlight(亮光)
psd_blend_mode_linear_light,//'lLit'=linearlight(线性光)
psd_blend_mode_pin_light,//'pLit'=pinlight(点光)
psd_blend_mode_hard_mix,//'hMix'=hardmix(实色混合)
psd_blend_mode_difference,//'diff'=difference(差值)
psd_blend_mode_exclusion,//'smud'=exclusion(排除)
psd_blend_mode_hue,//'hue'=hue(色相)
psd_blend_mode_saturation,//'sat'=saturation(饱和度)
psd_blend_mode_color,//'colr'=color(颜色)
psd_blend_mode_luminosity,//'lum'=luminosity(明度)
psd_blend_mode_pass_through,//'pass'=pass(通过)
}psd_blend_mode;
9)1字节(byte):
不透明度,0为透明,255为不透明
10)1字节(byte):
剪贴蒙版标记,0为底板,1为贴图
11)1字节(byte):
图层设置标记,每一位为一个标记,由右向左依次为:
a)0位:
透明度保护标记
b)1位:
显示图层标记
c)2位:
停用图层标记
d)3位:
像素数据无关标记(Photoshop5.0以上)
12)1字节(byte):
图层设置保留标记
13)4字节(int):
图层附加效果层数据长度(不知道为什么不设在图层附加效果层数据的前面)
14)4字节(int):
图层蒙版信息数据长度,可能的数值有0、20、36,如果为零,则表示没有数据。
a)如果数据长度为20,使用前18个字节,依次为:
1.4字节(int):
图层蒙版范围top
2.4字节(int):
图层蒙版范围left
3.4字节(int):
图层蒙版范围bottom
4.4字节(int):
图层蒙版范围right
5.1字节(byte):
蒙版图层的默认颜色(0或255)
6.1字节(byte):
蒙版图层设置标记,每一位为一个标记,由右向左依次为:
1)0位:
相对于图层的位置标记
2)1位:
关闭图层蒙版标记
3)2位:
混合时反转图层蒙版标记
7.2字节:
保留
b)如果数据长度为36,不使用前18个字节,依次为:
1.前18个字节:
不使用
2.1字节(byte):
蒙版图层设置标记,每一位为一个标记,由右向左依次为:
1)0位:
相对于图层的位置标记
2)1位:
关闭图层蒙版标记
3)2位:
混合时反转图层蒙版标记
3.1字节(byte):
蒙版图层的默认颜色(0或255)
4.4字节(int):
图层蒙版范围top
5.4字节(int):
图层蒙版范围left
6.4字节(int):
图层蒙版范围bottom
7.4字节(int):
图层蒙版范围right
15)4字节(int):
图层混合颜色带信息数据长度,其颜色通道数量=(数据长度-8字节)/8
16)2字节(short):
图层混合颜色带信息中的本图层灰度-黑色
17)2字节(short):
图层混合颜色带信息中的本图层灰度-白色
18)2字节(short):
图层混合颜色带信息中的下一图层灰度-黑色
19)2字节(short):
图层混合颜色带信息中的下一图层灰度-白色
20)图层混合颜色带各个颜色通道图层混合颜色带信息
a)2字节(short):
图层混合颜色带信息中的本图层灰度-黑色
b)2字节(short):
图层