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

了解 Adobe 如何让用户轻松编辑其标志性 Photoshop 应用的网络版中最大的文件。

简介

(本文也可以视频形式提供)。

2021 年,Adobe 与 Chrome 工程团队合作,将 Photoshop 版本推向网页版。该软件以创新的方式利用 WebAssembly,并具有 SIMD源私有文件系统中的高性能存储、用于画布的 P3 颜色空间以及具有 Lit 的 Web 组件等功能。在本文中,我们想了解 Adobe Photoshop 工程如何解决处理大小超过内存容量的文件这一问题。此外,就 WebAssembly 而言,Photoshop 如何处理大于 wasm32 的 32 位地址空间的文件。

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

问题

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

Photoshop 文件格式以无损压缩的形式存储数据。读取文件或文档时,所有图片数据都会被解压缩以提高处理效率。因此,所需的内存量可能比一个文档在磁盘或云端存储空间中占用的空间大几倍。

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

无论是桌面设备、移动设备还是浏览器,设备和平台都对内存进行管理。在为应用程序提供多少内存方面,有些应用比其他应用更宽松。内存容量也因设备而异,因为,当您订购新的计算机或设备时,会指定所需的随机存取存储器 (RAM) 大小。其中许多平台还支持虚拟内存,允许应用使用的内存多于物理可用内存。此支持因操作系统和运行时而异,就 WebAssembly 而言,应用可能不容易获取或使用。除此之外,现代虚拟系统也有上限,而 Photoshop 的要求很容易超越。

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

正如以往一样,Photoshop 需要解决的原始问题是在早期版本的 macOS 上编辑打印分辨率文件(操作系统和所有应用低至 1 MB)。以 CMYK 格式显示的 300 dpi 全页图片在未压缩的情况下约为 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 虚拟机提供的出色文档。