Photoshop 如何处理大于内存大小的文件:

了解 Adobe 如何让用户能够在其标志性 Photoshop 应用的 Web 版本上编辑超大型文件。

简介

(本文还提供视频形式。)

2021 年,Adobe 与 Chrome 工程团队合作,将 Photoshop 引入到 Web 平台。该软件创新地使用了 WebAssembly,并提供了 SIMD源私有文件系统中的高性能存储、适用于画布的 P3 色彩空间,以及带有 Lit 的 Web 组件等功能。本文将重点介绍 Adobe Photoshop 工程团队如何解决处理超出内存大小的文件的问题。对于 WebAssembly,了解 Photoshop 如何处理大于 wasm32 的 32 位地址空间的文件。

编辑 Project Fugu 徽标图片的 Photoshop 应用。

问题

打开文件进行修改需要大量内存,比打开文件进行查看需要的内存多得多。由于 Photoshop 提供的众多功能、其用于的数字设计和编辑类型以及用户设备的功能,在 Photoshop 中编辑的文件通常需要的内存往往比用户设备上可用的内存多。

Photoshop 文件格式使用无损压缩来存储数据。读取文件或文档时,系统会解压缩所有图片数据,以便更高效地进行处理。因此,所需的内存量可能比文档在磁盘或云端存储空间中占用的空间多出几倍。

Photoshop 支持非常大的撤消历史记录。Photoshop 中的许多操作都是所谓的破坏性操作。也就是说,进行编辑(例如使用画笔绘制)会产生与原始像素数据一样大的新像素数据。在长时间的编辑会话中进行这些修改会产生大量像素数据,这些数据必须保留以支持撤消操作。因此,历史记录可能会增长到数百兆字节或数十 GB 的数据。

设备和平台(无论是桌面设备、移动设备还是浏览器)都会管理内存。有些设备可向应用提供的内存比其他设备多。内存用量因设备而异,这点您在订购新计算机或设备时就已经知道了,因为您需要指定所需的随机存取内存 (RAM) 用量。其中许多平台还支持虚拟内存,这让应用可以使用比实际可用内存更多的内存。此支持因操作系统和运行时而异,例如 WebAssembly 可能不易于应用访问或使用。此外,现代虚拟系统的上限很容易被 Photoshop 要求超出。

理想情况下,应用会根据需要使用尽可能多的内存。这通常有助于他们为用户提供最佳性能。但是,如果它们使用过多内存,可能会受到运行时平台的惩罚,或者耗尽内存,导致失败。

历史背景:Photoshop 最初需要解决的问题是在早期版本的 macOS 上编辑打印分辨率文件,当时操作系统和所有应用的文件大小都低至 1 MB。一张 300 dpi 的 CMYK 全页图片在未压缩时的大小约为 32 MB。

解决方案

为了解决应用超出可用 RAM 量的问题,Photoshop 实现了软件虚拟内存系统 (VM)。Photoshop 使用其虚拟机来管理文档数据(尤其是图片数据)、所有撤消历史记录和状态,以及当前命令的工作存储空间。它还用于缓存大量数据(例如画笔说明),以便这些数据只需从磁盘序列化一次。

作为虚拟机管理的一个方面示例,图片数据使用 mipmap 表示法进行存储,该表示法是一组金字塔形图块,可提供从低到高分辨率的图片数据。这样,Photoshop 就可以根据适当的分辨率数据进行操作,从而缩放或查看预览时响应更快。

mipmap 图片存储示例:左侧的主图像随附缩减大小的过滤副本。

在应用初始化期间,Photoshop 会确定可用的 RAM 量。它会预留一部分空间来存储虚拟机中的数据。剩余的 RAM 可通过标准 C++ 运行时库供其他应用使用。虚拟机内存分为多个“页面”。每个页面通常是设备硬件页面大小的倍数。当用于图片数据时,内存被引用为图块。功能块是单个图层的像素方形区域,包括几何图形边界。功能块会占用一个或多个页面。

Photoshop 会创建一个或多个临时文件,以便为虚拟机页面提供基于磁盘的后备。这些临时文件存储在原始私有文件系统中。此屏幕截图显示了在图片编辑会话期间此类临时文件(以黄色突出显示)和其他文件的示例文件层次结构。每个备用文件可以包含多个虚拟机页面。当虚拟机需要更多后备时,它会创建其他临时文件。释放页面后,其在临时文件中的空间可供新页面重复使用。

使用 OPFS Explorer Chrome 扩展程序检查 Photoshop 的原始私有文件系统文件层次结构。

处理图片数据时,Photoshop 会迭代处理图块,执行像素计算。每项计算都可以引用多个功能块。虚拟机负责确保当前迭代的源和目标图块位于内存中,并根据需要从起始文件加载这些图块。同时,它可以将页面刷新到临时文件,以便在内存中腾出空间。

总结

虽然虚拟机的具体实现细节远超本文档的范围(并且也是 Adobe 的专有信息),但通过对解决方案的概要说明,您可以了解 Photoshop 如何处理大型文件。具有高性能文件读写权限的源私有文件系统是该解决方案的关键组成部分。

致谢

此博文由 Oliver Unter Ecker 和 Rachel Andrew 审核。特别感谢 Russell Williams 撰写了有关 Photoshop VM 的出色文档。