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):路径剪切范围分辨率
发布评论