Bagaimana Photoshop menyelesaikan bekerja dengan file yang lebih besar dari yang dapat masuk ke dalam memori

Pelajari cara Adobe memungkinkan pengguna mengedit file terbesar di versi web aplikasi Photoshop yang terkenal sekalipun.

Nabeel Al-Shamma
Nabeel Al-Shamma

Pengantar

(Artikel ini juga tersedia dalam bentuk video.)

Pada tahun 2021, Adobe, bersama dengan engineering Chrome, menghadirkan versi Photoshop ke web. Software ini memanfaatkan WebAssembly secara inovatif dengan fitur-fitur seperti SIMD, penyimpanan berperforma tinggi di sistem file pribadi asal, ruang warna P3 untuk kanvas, dan Komponen Web dengan Lit. Dalam artikel ini, kami ingin berfokus pada bagaimana teknik Adobe Photoshop memecahkan masalah file yang lebih besar dari yang dapat ditampung dalam memori. Dan, dalam kasus WebAssembly, bagaimana Photoshop bekerja dengan file yang lebih besar dari ruang alamat 32-bit wasm32.

Aplikasi Photoshop saat mengedit gambar logo Project Fugu.

Permasalahan

Membuka file untuk pengeditan membutuhkan memori dalam jumlah besar, jauh lebih besar daripada membuka file untuk ditampilkan. File yang diedit di Photoshop sering kali membutuhkan lebih banyak memori daripada yang tersedia oleh pengguna di perangkat mereka, karena banyaknya fitur yang ditawarkan oleh software, jenis desain dan pengeditan digital yang digunakan, dan kemampuan perangkat pengguna.

Format file Photoshop menyimpan data dengan kompresi lossless. Saat file atau dokumen dibaca, semua data gambar akan didekompresi untuk memungkinkan pemrosesan yang lebih efisien. Akibatnya, jumlah memori yang diperlukan bisa beberapa kali lebih besar daripada jumlah ruang yang digunakan dokumen pada disk atau penyimpanan cloud.

Photoshop mendukung riwayat pengurungan yang sangat besar. Banyak operasi di Photoshop yang kita sebut operasi destruktif. Artinya, melakukan pengeditan seperti melukis dengan kuas akan menghasilkan data piksel baru yang bisa sebesar data piksel aslinya. Melakukan pengeditan ini dalam sesi pengeditan yang panjang akan menghasilkan data piksel dalam jumlah besar yang harus disimpan untuk mendukung operasi urungkan. Dengan demikian, histori dapat tumbuh hingga beberapa ratus megabyte atau banyak gigabyte data.

Perangkat dan platform, baik itu komputer desktop, perangkat seluler, atau browser, semuanya mengelola memori. Beberapa di antaranya lebih mulia dalam hal jumlah memori yang tersedia untuk aplikasi. Jumlah memori juga bervariasi dari satu perangkat ke perangkat lain, seperti yang Anda ketahui saat memesan komputer atau perangkat baru dan menentukan jumlah Random-Access Memory (RAM) yang diinginkan. Banyak dari platform ini juga mendukung memori virtual, yang memungkinkan aplikasi menggunakan lebih banyak memori daripada yang tersedia secara fisik. Dukungan ini bervariasi berdasarkan sistem operasi dan runtime, seperti pada WebAssembly, mungkin tidak dapat diakses atau digunakan oleh aplikasi. Selain itu, sistem virtual modern memiliki batas atas yang mudah dilampaui oleh persyaratan Photoshop.

Idealnya, aplikasi akan menggunakan memori sebanyak yang mereka butuhkan. Hal ini umumnya memungkinkan mereka memberikan performa terbaik kepada pengguna. Akan tetapi, jika menggunakan terlalu banyak memori, mereka dapat dikenakan sanksi oleh platform runtime atau mungkin kehabisan memori, sehingga mengakibatkan kegagalan.

Sebagai catatan historis, masalah awal yang perlu diselesaikan Photoshop adalah mengedit file resolusi cetak pada macOS versi awal, minimal 1 MB untuk OS dan semua aplikasi. Gambar halaman penuh 300 dpi dalam CMYK berukuran sekitar 32 MB saat tidak dikompresi.

Solusi

Untuk mengatasi masalah aplikasi yang melebihi jumlah RAM yang tersedia, Photoshop menerapkan sistem memori virtual (VM) software. Photoshop menggunakan VM-nya untuk mengelola data dokumen, terutama data gambar, semua histori dan status urungkan, serta penyimpanan yang berfungsi untuk perintah saat ini. Ini juga digunakan untuk meng-cache blok data besar seperti deskripsi kuas sehingga mereka hanya perlu diserialisasi dari disk satu kali.

Sebagai contoh dari salah satu aspek yang dikelola oleh VM, data gambar disimpan menggunakan representasi mipmap, yang merupakan kumpulan ubin piramida, yang menyediakan data gambar pada rentang resolusi rendah hingga tinggi. Hal ini memungkinkan Photoshop untuk beroperasi pada data resolusi yang sesuai untuk respons yang lebih cepat saat memperbesar atau melihat pratinjau, dibandingkan jika diperkecil.

Contoh penyimpanan gambar mipmap: gambar utama di sebelah kiri disertai dengan salinan yang difilter berukuran lebih kecil.

Selama inisialisasi aplikasi, Photoshop menentukan jumlah RAM yang tersedia. Langkah ini menyisihkan satu bagian untuk data yang akan disimpan di VM. RAM yang tersisa tersedia untuk kebutuhan aplikasi lain melalui library runtime C++ standar. Memori VM dipecah menjadi beberapa halaman. Setiap halaman biasanya merupakan kelipatan dari ukuran halaman hardware untuk perangkat. Saat digunakan untuk data gambar, memori direferensikan sebagai petak. Kartu adalah area persegi piksel dari satu lapisan termasuk batas geometri. Kartu menggunakan satu atau beberapa halaman.

Photoshop membuat satu atau beberapa file scratch untuk menyediakan dukungan berbasis disk bagi halaman VM. File scratch ini disimpan dalam sistem file pribadi asal. Screenshot menunjukkan hierarki file contoh dari file gosok tersebut (ditandai dengan warna kuning) dan file lainnya selama sesi pengeditan gambar. Setiap file scratch dapat berisi banyak halaman VM. Saat memerlukan lebih banyak cadangan, VM akan membuat file scratch tambahan. Saat halaman dibebaskan, ruangnya di file scratch dapat digunakan kembali untuk halaman baru.

Memeriksa hierarki file sistem file pribadi asal Photoshop dengan ekstensi Chrome OPFS Explorer.

Saat memproses data gambar, Photoshop melakukan iterasi pada ubin untuk melakukan penghitungan piksel. Setiap penghitungan dapat mereferensikan beberapa kartu. VM bertanggung jawab untuk memastikan bahwa tile sumber dan tujuan untuk iterasi saat ini berada dalam memori, memuatnya dari file awal sesuai kebutuhan. Pada saat yang sama, tindakan ini dapat mengosongkan halaman ke file scratch untuk mengosongkan ruang di memori.

Kesimpulan

Meskipun detail implementasi konkret VM akan melampaui cakupan dokumen ini (dan juga merupakan milik Adobe), dengan deskripsi solusi yang mendetail, kami telah menempatkan Anda pada posisi yang memungkinkan Anda memahami bagaimana Photoshop dapat menangani file berukuran besar. Sistem file pribadi origin dengan akses baca dan tulisnya yang berperforma tinggi ke file merupakan komponen utama dari solusi ini.

Ucapan terima kasih

Postingan blog ini ditinjau oleh Oliver Unter Ecker dan Rachel Andrew. Terima kasih banyak kepada Russell Williams atas dokumentasinya yang luar biasa tentang VM Photoshop.