2024年2月4日发(作者:)

PSD文件解析

(lzgame整理)

一、 PSD文件结构为:

文件头信息

颜色映射表

图像资源

图层与蒙版信息

图像数据

二、 PSD文件头信息结构

typedef struct tagPSD_FILE_HEADER

{

DWORD signature;

WORD version;

WORD reserved1;

WORD reserved2;

WORD reserved3;

WORD number_of_channels;

DWORD height_of_image;

DWORD width_of_image;

WORD depth;

WORD color_mode;

} psd_file_header;

大小

字 段 名 类型 (字描 述

节)

signature

version

reserved1-3

char 4

short 2

6

签名:总是为'8BPS'

版本: 总是为 1 (**PSB** 版本为 2)

保留: 必须为 0

图片通道数量,包含所有颜色通道数和alpha通道数。支持范围为 1 - 56

图片高度像素数,支持范围为 1 - 30,000.

(**PSB** 最大为 300,000.)

图片宽度像素数,支持范围为 1 - 30,000.

(*PSB** 最大为 300,000)

每像素字节数: 支持的值为 1, 8, 16.

颜色模式. 支持的值有: Bitmap = 0; Grayscale

color_mode

short 2

= 1; Indexed = 2; RGB = 3; CMYK = 4;

Multichannel = 7; Duotone = 8; Lab = 9.

number_of_channels short 2

height_of_image int 4

width_of_image

depth

int 4

short 2

三、 PSD颜色映射表,在photoshop中仅有索引色模式和双色调模式有颜色映射表,数据格式如下:

1. 4字节(int):颜色映射表三色总颜色数

2. 颜色映射表数据区:颜色映射表中保存的颜色数量为“三色总颜色数/3”,在颜色映射表中每个颜色的RGB三色被分开保存,每个颜色值2字节,依次为R通道数据区、G通道数据区、B通道数据区。可以计算得到总数据长度为“颜色映射表三色总颜色数 * 2字节”

四、 PSD图像资源,起始为4字节的图像资源数量(int),然后为图像资源数据区,图像资源的数据结构为:

typedef struct tagPSD_IMAGE_RESOURCE {

DWORD signature;

WORD UniqueID;

BYTE nNameSize;

BYTE* name;

DWORD nResourceSize;

BYTE* data;

} psd_ image_resource;

大小

字 段 名 类型 (字节)

signature Int 4

UniqueID Short 2

签名,总是为'8BIM'

资源唯一索引号

描 述

nLength Byte 1

name

nSize

Data

Char nLength

Int 4

Byte nSize

名称字符串长度

名称,Pascal字符串,长度如果为奇数,在字符串末尾追加1个字节“0”

实际资源数据字节数

实际图像资源数据,长度如果为奇数,在图像资源数据末尾追加1个字节“0”

已知资源ID介绍:

1. ID 1005:图像分辨率,共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. ID 1006:Alpha通道的名称列表,以Pascal字符串存储,即通道名称字符串长度(1字节)+ 通道名称(最大255字节)。可以通过计算名称数量获得总alpha通道数。

3. ID 1007:颜色通道信息

1) 10字节:颜色通道对应的颜色值:

2) 2字节(short):颜色值使用的颜色空间类型,颜色空间表示了PhotoShop把不同颜色模式转换为屏幕RGB显示模式的取值方式。

颜色空间类型定义为:

typedef enum {

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, // TOYO

ColorFinder颜色

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. ID 1008:标题,以Pascal字符串存储,即标题长度(1字节)+标题(最大255字节)

5. ID 1024:当前图层ID号(2字节),为0 表示最后一层

6. ID 1026:图层组信息,每个图层组ID占用2个字节,可通过计算该资源的数据长度/2得到图层组总数量

7. ID 1033:缩略图资源结构,同ID 1036;(Photoshop 4.0)

8. ID 1036:缩略图资源结构,缩略图信息由28字节的头信息+JFIF格式的RGB图像数据组成。(Photoshop 5.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. ID 1034: Copyright 标记(2字节)。Photoshop (v4.0以上)

10. ID 1037:全局光照角度(4字节(int)),范围为0-359,用于图层效果,默认为30。(Photoshop 5.0以上)

11. ID 1042:显示图层效果标记(1字节),全局标记,用于显示或隐藏所有的图层效果。(Photoshop 5.0以上)

12. ID 1045: Alpha通道的Unicode名称列表(Unicode字符串,每个字符由2个字节组成),存储格式为:通道Unicode名称字符串长度(4字节)+ 通道Unicode名称(字符串长度 * 2字节)。可以通过计算名称数量获得总alpha通道数。(Photoshop 5.0以上)

13. ID 1046:索引颜色表颜色数量(2字节)。(Photoshop 6.0以上)

14. ID 1047:索引颜色表中透明色的索引号(2字节)。(Photoshop 6.0以上)

15. ID 1049:全局光源高度(Global Altitude)(4字节)。(Photoshop

6.0以上)

16. ID 1053: Alpha 通道ID号列表(4字节/ID号),可以通过计算ID号数量获得总alpha通道数。(Photoshop 6.0以上)

17. ID 1057:(Photoshop 6.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. ID 2000-2998:Photoshop路径资源,ID范围为2000-2998。

路径资源数据由26字节的资源块组成,总长度为26 x 路径资源数量

起始的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):路径剪切范围分辨率