PSD 文件里到底装了什么
PSD 不是"一张图加几个图层",而是一个由文件头、色彩块、图层记录和一张独立的拼合预览图组成的容器。它那些奇怪的行为,基本都是这个结构造成的。
用十六进制编辑器打开一个 .psd,头四个字节是 8BPS。肉眼可见的魔法只有这四个字节,后面全是一段一段的区块;而 PSD 所有让人困惑的行为,几乎都来自这些区块之间的相互关系。
四个区块,按顺序
一个 PSD 依次是:文件头、色彩模式数据块、图像资源块,然后是图层与蒙版信息,最后是拼合后的图像数据。
文件头很小:版本号(PSD,或者大文档变体 PSB)、通道数、高度、宽度、位深、色彩模式。文件里其他一切内容都由这六个数决定。
色彩模式块在索引色文件里保存调色板,在 RGB 文件里几乎什么都不存——这就是为什么 RGB 的 PSD 和索引色的 PSD 在老软件里表现完全不同。
图像资源块放元数据:ICC 配置、分辨率、参考线、切片定义、Photoshop 给打开对话框嵌的缩略图,甚至写文件那个程序的版本字符串。这一块设计上允许跳过,不解析它的读取器照样能打开文件。
接下来才是图层,也是大家真正关心的部分,同时也是最复杂的:一串图层记录,携带名称、不透明度、混合模式、蒙版、混合范围,以及若干带标签的附加块——文字引擎数据、矢量路径、图层效果、智能对象引用都在这里。
拼合预览图比你以为的更重要
文件最末尾、图层数据之后,PSD 还存了一张整个文档的拼合图。
正是这张图让一个结构已经损坏的 PSD 看起来仍然正常。不支持图层的看图软件直接显示拼合图,永远正确、永远是平的。换成能读图层栈的编辑器打开同一个文件,你可能发现字体缺失、智能对象读不出来、某个图层组重建失败,画面和你五分钟前看到的预览不一样了。
当有人说”文件能打开但是少了东西”,描述的几乎总是这个落差:拼合图加载了,图层栈只重建了一部分。
RLE、ZIP,以及文件为什么那么大
图层通道数据可以按原样存、用 RLE 压缩或 ZIP 压缩,Photoshop 逐通道自行选择。摄影类图层常用 ZIP,大色块用 RLE 压得好,16 位数据经常干脆不压缩,因为省下的时间比省下的体积更值钱。
实际后果是:PSD 的体积不能反映图像复杂度。一个 4000 × 4000、带三十个调整图层的文档,可能比同样尺寸的单层照片还小,因为调整图层存的是参数而不是像素。
“支持 PSD” 到底是什么意思
不同编辑器所说的 PSD 支持差得很远,值得先分清你拿到的是哪一种:
- 只读拼合图:文件打开就是一张平图。看图够用,编辑没戏。
- 基础图层:能读图层名、可见性、不透明度和混合模式,但效果、智能对象、文字会被栅格化或丢掉。
- 完整图层:字体存在时文字保持可编辑,蒙版与调整图层保留参数,还能不拍平地写回文件。
工作文件需要的是最后一种,而一个 PSD 读取器大部分的工程投入也都花在这里——这也是浏览器编辑器花了好几年才追上的原因。
拿真实文件对照一下
想看的不是文字而是结构,就把一个分层 PSD 拖进 PhotoPSD 编辑器:图层面板对应图层记录,通道面板显示实际存储的通道,属性面板里是图像资源块带出来的文档元数据。要把结果变成可交付的平图是另一回事,PSD 转 PNG 那页有完整流程。
不用等下载,现在就能试
打开分层 PSD、改完导出 PNG,文件不上传。