Photoshop 如何解決超過記憶體空間大小的檔案

瞭解 Adobe 如何管理這款應用程式,讓使用者在網頁版 Photoshop 應用程式上,甚至能編輯最大的檔案。

納貝爾阿爾薩馬 (Nabeel Al-Shamma)
Nabeel Al-Shamma

簡介

(這篇文章也可以影片的形式提供)。

2021 年,Adobe 與 Chrome 工程團隊合作推出網頁版 Photoshop 版本。這套軟體讓您以創新的方式運用 WebAssembly ,例如 SIMD來源私人檔案系統中的高效能儲存空間、畫布的 P3 色彩空間,以及 Lit 的 Web 元件。本文旨在聚焦於 Adobe Photoshop 工程團隊,如何解決處理超過記憶體大小的檔案。以 WebAssembly 為例,Photoshop 會如何處理大於 wasm32 32 位元位址空間的檔案。

編輯 Project Fugu 標誌圖片時的 Photoshop 應用程式。

問題

開啟檔案以便編輯需要大量記憶體,遠比開啟檔案查看更大。在 Photoshop 中編輯的檔案通常比使用者裝置可用的還多,因為軟體提供許多功能、用於數位設計和編輯的類型,以及使用者裝置的功能。

Photoshop 檔案格式會以無損壓縮的方式儲存資料,讀取檔案或文件時,系統會將圖片資料全部解壓縮,以利提升處理效率。因此,需要的記憶體容量可能會超過文件在磁碟或雲端儲存空間中使用的數倍。

Photoshop 支援非常龐大的復原記錄。Photoshop 中的許多作業就是所謂的破壞性作業。也就是說,如果使用筆刷繪製繪圖,會產生新的像素資料,甚至和原始像素資料一樣大。想在長時間的編輯工作階段中進行這類編輯會產生大量像素資料,必須保留下來以支援復原作業。因此,歷史記錄可能會擴充到數百 MB 或幾 GB 的資料。

裝置和平台 (桌機、行動裝置或瀏覽器) 皆可管理記憶體,有些檔案為應用程式提供的記憶體容量更為寬鬆。記憶體數量也因裝置而異。如您所知,訂購新電腦或裝置,並指定所需的隨機存取記憶體 (RAM) 容量,就能夠因應各種裝置。這些平台許多都支援虛擬記憶體,因此可讓應用程式使用的記憶體超過實際可用的空間。支援的支援會因作業系統和執行階段而異 (例如 WebAssembly),應用程式可能無法隨時存取或使用。除此之外,現代的虛擬系統也有上限,很容易超出 Photoshop 的規定。

在理想情況下,應用程式會視需要使用記憶體。通常因此能為使用者帶來最佳效能。不過,如果使用的記憶體過多,執行階段平台可能會對其造成負面影響,或記憶體不足,導致作業失敗。

根據過去的注意事項,Photoshop 必須解決原本的問題,就是在早期 macOS 版本上編輯列印解析度檔案 (對 OS 和所有應用程式而言最低 1 MB)。在 CMYK 中,300 dpi 的完整頁面圖片在未壓縮時約為 32 MB。

解決方案

為瞭解決應用程式超過可用 RAM 容量的問題,Photoshop 導入了軟體虛擬記憶體系統 (VM)。Photoshop 會使用自家 VM 來管理文件資料,特別是映像檔資料、所有復原記錄和狀態,以及目前指令的工作儲存空間。這項工具也用於快取筆刷說明等大型資料區塊,因此只需要在磁碟中序列化一次。

舉例來說,VM 管理的圖片資料是以「mipmap」mipmap表示法儲存的其中之一,代表是一組金字塔,提供低解析度到高解析度的圖片資料。這可讓 Photoshop 運用適當的解析度資料,以便加快放大或查看預覽畫面,而非縮小畫面。

mipmap 圖片儲存空間範例:左側主要圖片會伴隨經過篩選的縮減大小副本。

在應用程式初始化期間,Photoshop 會判斷可用的 RAM 容量。這個步驟會分開儲存一部分資料,以便儲存在 VM 中。剩餘的 RAM 可以透過標準 C++ 執行階段程式庫提供給其他應用程式。VM 記憶體會細分為多個「頁面」。每個頁面通常是裝置的硬體頁面大小的倍數。用於圖片資料時,記憶體會以圖塊的形式參照。圖塊是單一圖層的正方形像素區域,包含幾何圖形邊界。資訊方塊會使用一或多個頁面。

Photoshop 會建立一或多個暫存檔案,以便為 VM 頁面提供磁碟支援機制。這些暫存檔案會儲存在來源私人檔案系統中。螢幕截圖顯示圖片編輯工作階段期間,這類暫存檔案 (以黃色標明) 及其他檔案的階層檔案階層。每個暫存檔案都可包含許多 VM 頁面。如果 VM 需要更多支援,就會建立額外的暫存檔案。頁面釋放後,就可以將暫存檔案中的空間用於新頁面。

使用 OPFS Explorer Chrome 擴充功能檢查 Photoshop 的原始私人檔案系統檔案階層,

處理圖像資料時,Photoshop 會疊代圖塊,並執行像素計算。每項計算都可參照多個圖塊。VM 負責確保目前疊代的來源和目的地圖塊位於記憶體中,並視需要從暫存檔案載入這些圖塊。此外,這項工具也可以將頁面清除至暫存檔案,騰出記憶體空間。

結論

雖然 VM 具體實作細節並不侷限在本文件的討論範圍 (同時也是 Adobe 專屬),但我們會概略說明解決方案。不過,我們可以協助你瞭解 Photoshop 如何處理大型檔案。來源私人檔案系統擁有高效能的檔案讀取和寫入權限,是解決方案的重要一環。

特別銘謝

這篇網誌文章是由 Oliver Unter Ecker 和 Rachel Andrew 評論。特別感謝 Russell Williams 分享在 Photoshop VM 上取得的優質說明文件。