Photoshop ने ऐसी फ़ाइलों पर काम करने का तरीका अपनाया जो मेमोरी में फ़िट हो सकने वाली फ़ाइलों से बड़ी हैं

जानें कि Adobe ने अपने लोकप्रिय Photoshop ऐप्लिकेशन के वेब वर्शन पर, लोगों को बड़ी फ़ाइलों में भी बदलाव करने की सुविधा कैसे दी.

परिचय

(यह लेख वीडियो के तौर पर भी उपलब्ध है.)

साल 2021 में, Adobe ने Chrome की इंजीनियरिंग टीम के साथ मिलकर Photoshop का एक वर्शन वेब पर उपलब्ध कराया. यह सॉफ़्टवेयर, SIMD, ओरिजिनल निजी फ़ाइल सिस्टम में बेहतर परफ़ॉर्मेंस वाले स्टोरेज, कैनवस के लिए P3 कलर स्पेस, और Lit के साथ वेब कॉम्पोनेंट जैसी सुविधाओं के साथ, वेब असेंबली का नया इस्तेमाल करता है. इस लेख में, हम इस बात पर फ़ोकस करना चाहते हैं कि Adobe Photoshop की इंजीनियरिंग टीम ने, मेमोरी में फ़िट होने से ज़्यादा बड़ी फ़ाइलों के साथ काम करने की समस्या को कैसे हल किया. साथ ही, WebAssembly के मामले में, Photoshop, wasm32 के 32-बिट पता स्पेस से बड़ी फ़ाइलों के साथ कैसे काम करता है.

Project Fugu के लोगो की इमेज में बदलाव करते समय Photoshop ऐप्लिकेशन.

समस्या

किसी फ़ाइल में बदलाव करने के लिए, ज़्यादा मेमोरी की ज़रूरत होती है. यह मेमोरी, फ़ाइल को देखने के लिए ज़रूरी मेमोरी से काफ़ी ज़्यादा होती है. Photoshop में बदलाव की गई फ़ाइलों को अक्सर ज़्यादा मेमोरी की ज़रूरत होती है. यह ज़रूरत, डिवाइस में मौजूद मेमोरी से ज़्यादा होती है. इसकी वजह यह है कि इस सॉफ़्टवेयर में कई सुविधाएं मिलती हैं. साथ ही, इसका इस्तेमाल कई तरह के डिजिटल डिज़ाइन और बदलाव करने के लिए किया जाता है. इसके अलावा, उपयोगकर्ता के डिवाइस की क्षमताएं भी इसकी वजह हो सकती हैं.

Photoshop फ़ाइल फ़ॉर्मैट, डेटा को लॉसलेस कंप्रेसन के साथ सेव करता है. जब कोई फ़ाइल या दस्तावेज़ पढ़ा जाता है, तो इमेज के सभी डेटा को डिकंप्रेस कर दिया जाता है, ताकि उसे बेहतर तरीके से प्रोसेस किया जा सके. इस वजह से, किसी दस्तावेज़ के लिए ज़रूरी मेमोरी, डिस्क या क्लाउड स्टोरेज में इस्तेमाल होने वाली जगह से कई गुना ज़्यादा हो सकती है.

Photoshop में, बदलावों को पहले जैसा करने का इतिहास बहुत बड़ा हो सकता है. Photoshop में कई कार्रवाइयां ऐसी होती हैं जिन्हें हम डेस्ट्रक्टिव कार्रवाइयां कहते हैं. इसका मतलब है कि ब्रश से पेंट करने जैसे बदलाव करने पर, नया पिक्सल डेटा बनेगा, जो ओरिजनल पिक्सल डेटा जितना ही बड़ा हो सकता है. बदलाव करने के लंबे सेशन में ये बदलाव करने पर, ज़्यादा पिक्सल डेटा जनरेट होता है. बदलावों को पहले जैसा करने के लिए, इस डेटा को सेव रखना ज़रूरी होता है. इसलिए, जगह की जानकारी का इतिहास कई सौ मेगाबाइट या कई गीगाबाइट तक का हो सकता है.

डिवाइस और प्लैटफ़ॉर्म, चाहे वे डेस्कटॉप मशीनें हों, मोबाइल डिवाइस हों या ब्राउज़र, सभी मेमोरी मैनेज करते हैं. कुछ डिवाइसों में ऐप्लिकेशन के लिए ज़्यादा मेमोरी उपलब्ध होती है. मेमोरी की क्षमता भी हर डिवाइस के हिसाब से अलग-अलग होती है. जैसे, नया कंप्यूटर या डिवाइस ऑर्डर करते समय, रैंडम-ऐक्सेस मेमोरी (रैम) की तय सीमा बताई जाती है. इनमें से कई प्लैटफ़ॉर्म वर्चुअल मेमोरी के साथ भी काम करते हैं. इससे ऐप्लिकेशन, फ़िज़िकल मेमोरी से ज़्यादा मेमोरी का इस्तेमाल कर सकता है. यह सहायता, ऑपरेटिंग सिस्टम और रनटाइम के हिसाब से अलग-अलग होती है. जैसे, हो सकता है कि WebAssembly को ऐप्लिकेशन आसानी से ऐक्सेस न कर पाएं या उसका इस्तेमाल न कर पाएं. इसके अलावा, आधुनिक वर्चुअल सिस्टम की ऊपरी सीमाएं ऐसी होती हैं जिन्हें Photoshop की ज़रूरतों के हिसाब से आसानी से बढ़ाया जा सकता है.

आम तौर पर, ऐप्लिकेशन ज़रूरत के हिसाब से मेमोरी का इस्तेमाल करते हैं. इससे आम तौर पर, उपयोगकर्ताओं को सबसे अच्छी परफ़ॉर्मेंस मिलती है. हालांकि, अगर वे बहुत ज़्यादा मेमोरी का इस्तेमाल करते हैं, तो रनटाइम प्लैटफ़ॉर्म उन्हें दंडित कर सकता है या मेमोरी खत्म हो सकती है. इस वजह से, ऐप्लिकेशन काम नहीं करेगा.

इतिहास के हिसाब से, Photoshop को जिस मूल समस्या को हल करना था वह macOS के शुरुआती वर्शन पर प्रिंट रिज़ॉल्यूशन फ़ाइलों में बदलाव करना था. यह फ़ाइल, ओएस और सभी ऐप्लिकेशन के लिए 1 एमबी तक की हो सकती थी. सीएमवाईके में 300 डीपीआई वाली फ़ुल पेज इमेज का साइज़, बिना कंप्रेस किए करीब 32 एमबी होता है.

समाधान

ऐप्लिकेशन के लिए ज़्यादा रैम इस्तेमाल होने की समस्या को हल करने के लिए, Photoshop ने सॉफ़्टवेयर वर्चुअल मेमोरी सिस्टम (VM) लागू किया. Photoshop, दस्तावेज़ के डेटा को मैनेज करने के लिए अपने वर्चुअल मशीन का इस्तेमाल करता है. खास तौर पर, इमेज का डेटा, पहले जैसा करने का पूरा इतिहास, और स्टेटस. साथ ही, मौजूदा कमांड के लिए काम करने वाले स्टोरेज का इस्तेमाल भी करता है. इसका इस्तेमाल, ब्रश की जानकारी जैसे बड़े डेटा ब्लॉक को कैश मेमोरी में सेव करने के लिए भी किया जाता है, ताकि उन्हें डिस्क से सिर्फ़ एक बार सीरियलाइज़ किया जा सके.

वीएम की मदद से मैनेज किए जाने वाले एक पहलू के उदाहरण के तौर पर, इमेज डेटा को mipmap के ज़रिए सेव किया जाता है. यह टाइल का पिरामिड सेट होता है, जो कम से ज़्यादा रिज़ॉल्यूशन में इमेज डेटा उपलब्ध कराता है. इससे Photoshop, ज़ूम इन या झलक देखने के दौरान, ज़ूम आउट के मुकाबले ज़्यादा तेज़ी से काम कर पाता है. ऐसा, सही रिज़ॉल्यूशन वाले डेटा का इस्तेमाल करके किया जाता है.

मिपमैप इमेज के स्टोरेज का उदाहरण: बाईं ओर मौजूद मुख्य इमेज के साथ, कम साइज़ की फ़िल्टर की गई कॉपी मौजूद हैं.

ऐप्लिकेशन शुरू होने के दौरान, Photoshop यह तय करता है कि कितनी रैम उपलब्ध है. यह वीएम में सेव किए जाने वाले डेटा के लिए एक हिस्सा सेट करता है. बाकी रैम, स्टैंडर्ड C++ रनटाइम लाइब्रेरी के ज़रिए, अन्य ऐप्लिकेशन की ज़रूरतों के लिए उपलब्ध होती है. VM मेमोरी को पेजों में बांटा गया है. आम तौर पर, हर पेज का साइज़, डिवाइस के हार्डवेयर पेज साइज़ से कई गुना होता है. इमेज डेटा के लिए इस्तेमाल किए जाने पर, मेमोरी को टाइल के तौर पर रेफ़र किया जाता है. टाइल, ज्यामिति के बाउंड के साथ एक लेयर के पिक्सल का स्क्वेयर एरिया होता है. एक टाइल में एक या उससे ज़्यादा पेज होते हैं.

Photoshop, एक या उससे ज़्यादा स्क्रैच फ़ाइलें बनाता है, ताकि वीएम पेजों के लिए डिस्क पर आधारित बैकअप दिया जा सके. ये स्क्रैच फ़ाइलें, ओरिजनल निजी फ़ाइल सिस्टम में सेव की जाती हैं. स्क्रीनशॉट में, इमेज में बदलाव करने के दौरान, इस तरह की स्क्रैच फ़ाइल (पीले रंग में हाइलाइट की गई) और अन्य फ़ाइलों की फ़ाइल हैरारकी का उदाहरण दिखाया गया है. हर स्क्रैच फ़ाइल में कई VM पेज हो सकते हैं. जब VM को ज़्यादा बैकिंग की ज़रूरत होती है, तो वह अतिरिक्त स्क्रैच फ़ाइलें बनाता है. पेजों को हटाने के बाद, स्क्रैच फ़ाइल में उनके लिए इस्तेमाल किए गए स्टोरेज का इस्तेमाल, नए पेजों के लिए किया जा सकता है.

OPFS Explorer Chrome एक्सटेंशन की मदद से, Photoshop के ओरिजिनल निजी फ़ाइल सिस्टम की फ़ाइल हैरारकी की जांच करना.

इमेज डेटा को प्रोसेस करते समय, Photoshop टाइल पर बार-बार काम करता है और पिक्सल की गिनती करता है. हर कैलकुलेशन में कई टाइल का रेफ़रंस दिया जा सकता है. वीएम यह पक्का करता है कि मौजूदा इंटिग्रेशन के लिए सोर्स और डेस्टिनेशन टाइल मेमोरी में हों. साथ ही, ज़रूरत के हिसाब से उन्हें स्क्रैच फ़ाइलों से लोड करता है. साथ ही, यह मेमोरी में जगह बनाने के लिए, पेजों को स्क्रैच फ़ाइलों में फ़्लश कर सकता है.

मीटिंग में सामने आए नतीजे

वीएम को लागू करने की पूरी जानकारी इस दस्तावेज़ में नहीं दी गई है. यह जानकारी Adobe के मालिकाना हक वाली है. हालांकि, हमने इस समस्या को हल करने के बारे में ज़्यादा जानकारी दी है, ताकि आप यह समझ सकें कि Photoshop बड़ी फ़ाइलों को कैसे मैनेज करता है. ओरिजनल निजी फ़ाइल सिस्टम, फ़ाइलों को पढ़ने और लिखने के लिए बेहतर परफ़ॉर्म करता है. यह समाधान का एक अहम हिस्सा है.

आभार

इस ब्लॉग पोस्ट की समीक्षा, ओलिवर अंडर एकर और रेचल एंड्रयू ने की है. फ़ोटोशॉप वीएम के बारे में बेहतरीन दस्तावेज़ उपलब्ध कराने के लिए, रसेल विलियम्स का विशेष धन्यवाद.