什么是 PSD 文件?
PSD,Photoshop 文档,代表 Adobe Photoshop 用于图形设计和开发的原生文件格式。 PSD 文件可能包括图像图层、调整图层、图层蒙版、注释、文件信息、关键字和其他 Photoshop 特定元素。 Photoshop 文件的默认扩展名为 .PSD,最大高度和宽度为 30,000 像素,长度限制为 2 GB。
PSD 文件格式规范
PSD 文件中的数据以大端字节序存储。这意味着在 Windows 平台上读取或写入时交换短整数和长整数。 Photoshop 文件格式分为五个主要部分。它有许多长度标记,可用于从一个部分移动到下一个部分。长度标记通常用字节填充以四舍五入到最接近的 2 或 4 字节间隔。五个主要部分是:
- 文件头
- 颜色模式数据
- 图片资源
- 图层和蒙版信息
- 图像数据
为保持一致性,应将数据写入该部分的所有这些字段,因为 Photoshop 可能会尝试读取整个部分。它还意味着在写入文件时将零写入跳过的字段。应使用以长度分隔的部分中的长度字段来决定何时停止阅读。在大多数情况下,长度字段表示随后的字节数,而不是记录数。读取文件时需要记住以下几点。
- 所有表格中“长度"列的值均以字节为单位。
- 定义为 Unicode 字符串的所有值包括:
- 一个 4 字节长度的字段,表示字符串中的字符数(不是字节数)。
- Unicode 值的字符串,每个字符两个字节。
文件头###
文件头包含图像的基本属性。
长度 | 描述 |
---|---|
4 | 签名:总是等于 ‘8BPS’ 。如果签名与此值不匹配,请不要尝试读取文件。 |
2 | 版本:始终等于 1。如果版本与此值不匹配,请不要尝试读取文件。 (~~PSB~~ 版本为 2。) |
6 | 保留:必须为零。 |
2 | 图像中的通道数,包括任何 Alpha 通道。支持的范围是 1 到 56。 |
4 | 图像的高度,以像素为单位。支持的范围是 1 到 30,000。 |
4 | 图像的宽度,以像素为单位。支持的范围是 1 到 30,000。 |
2 | 深度:每个通道的位数。支持的值为 1、8、16 和 32。 |
2 | 文件的颜色模式。支持的值为:位图#0;灰度#1;索引#2; RGB #3; CMYK #4;多通道#7;双色调#8;实验室#9。 |
颜色模式数据部分
颜色模式数据部分的结构如下:
长度 | 描述 |
---|---|
4 | 后面颜色数据的长度 |
变量 | 颜色数据 |
颜色模式数据仅适用于文件标题部分中模式字段定义的索引颜色和双色调。对于所有其他模式,此部分由 4 字节的零值表示。对于索引彩色图像,长度为 768,颜色数据包含图像的颜色表,以非交错顺序排列。对于双色调图像,颜色数据包含双色调规范(其格式未记录)。读取 Photoshop 文件的其他应用程序可以将双色调图像视为灰色图像,并在读取和写入文件时仅保留双色调信息的内容。
图像资源部分###
该文件的第三部分包含图像资源。它以一个长度字段开始,然后是一系列资源块。
长度 | 描述 |
---|---|
4 | 图片资源部分的长度。长度可以为零。 |
变量 | 图像资源(图像资源块) |
图像资源用于存储与图像相关的非像素数据,例如钢笔工具路径。它们被称为资源块,因为它们保存了早期版本的 Photoshop 中存储在 Macintosh 资源中的数据。图像资源块的基本结构如下图所示:
长度 | 描述 |
---|---|
4 | 签名:‘8BIM’ |
2 | 资源的唯一标识符。图像资源 ID 包含 Photoshop 使用的资源 ID 列表。 |
变量 | 名称:Pascal 字符串,填充以使大小均匀(空名称由两个字节的 0 组成) |
4 | 后面的资源数据的实际大小 |
变量 | 资源数据,在各个资源类型的章节中描述。它被填充以使尺寸均匀。 |
图像资源使用几个标准 ID 号。
图层和蒙版信息###
Photoshop 文件的第四部分包含有关图层和蒙版的信息,例如图层数、图层中的通道、混合范围、调整图层键、效果图层和蒙版参数。如果没有图层或掩码,则此部分由零的 4 字节字段表示。由于零值,在阅读本节时需要特别注意节的长度。图层和蒙版部分的排列如下:
长度 | 描述 |
---|---|
4 | 层和掩码信息部分的长度。 (PSB 长度为 8 个字节。) |
变量 | 图层信息 |
变量 | 全局图层蒙版信息 |
变量 | 包含各种类型数据的标记块系列。 |
图层信息####
下表显示了层信息的高级组织。
长度 | 描述 |
---|---|
4 | 层信息部分的长度,四舍五入为 2 的倍数。(PSB 长度为 8 个字节。) |
2 | 层数。如果为负数,则其绝对值为层数,第一个 Alpha 通道包含合并结果的透明度数据。 |
变量 | 关于每一层的信息。请参阅层记录描述了每个层的此信息的结构。 |
变量 | 通道图像数据。包含每一层的一个或多个图像数据记录。图层的顺序与图层信息中的顺序相同 |
图像数据###
图像像素数据包含在文件的图像数据部分。图像数据部分的数据排列是平面顺序,即首先是所有红色数据,然后是所有绿色数据,依此类推。每个平面按扫描线顺序存储,没有填充字节,图像数据部分按格式排列如下表所示。
长度 | 描述 |
---|---|
2 | 压缩方法: *0 = 原始图像数据 * 1 = RLE 压缩图像数据以所有扫描线(行 * 通道)的字节计数开始,每个计数存储为两个字节的值。随后是 RLE 压缩数据,每条扫描线单独压缩。 RLE 压缩与 Macintosh ROM 例程 PackBits 和 TIFF 标准使用的压缩算法相同。 *2 = 没有预测的 ZIP *3 = 有预测的 ZIP。 |
变量 | 图像数据。平面顺序 = RRR GGG BBB 等。 |