फ़ोटो में बदलाव करने वाला ऐप्लिकेशन Photopea, फ़ाइल हैंडलिंग एपीआई का इस्तेमाल किस तरह करता है, ताकि उपयोगकर्ता अपने फ़ाइल एक्सप्लोरर से फ़ाइलें खोल सकें

फ़ाइल हैंडलिंग एपीआई, वेब ऐप्लिकेशन को उन फ़ाइल फ़ॉर्मैट के लिए खुद को फ़ाइल हैंडलर के तौर पर रजिस्टर करने देता है जो ऐप्लिकेशन के साथ काम कर सकता है. जानें कि फ़ोटो में बदलाव करने वाला ऐप्लिकेशन Photopea, इस एपीआई का इस्तेमाल कैसे करता है.

थॉमस स्टेनर
थॉमस स्टेनर
इवान कुटस्कर
इवान कुटस्कीर

शुरुआती जानकारी

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

Photopea एक मुफ़्त ऑनलाइन इमेज एडिटर है. इसे इवान कुटस्कीर ने बनाया है. इवान ने इस ऐप्लिकेशन पर 2012 से काम करना शुरू किया. उन्होंने Photospea में जोड़ी जाने वाली मुख्य सुविधाओं के बारे में एक ब्लॉग पब्लिश किया है. Photopea, PSD (Adobe Photoshop), XCF (GIMP), Sketch (Sketch ऐप्लिकेशन), XD (Adobe XD), और CDR (CorelDRAW) फ़ॉर्मैट के साथ काम कर सकता है.

Photopea ऐप्लिकेशन.

Photopea में फ़ाइल मैनेज करने की सुविधा

जब उपयोगकर्ता ऐप्लिकेशन इंस्टॉल करने का विकल्प चुनता है, तो Photopea एक स्टैंडअलोन विंडो में काम करता है. यह इंस्टॉल किए जा सकने वाले PWA के तौर पर काम करता है. ऐसा करने से, Photopea को PWA की सुपर पावर मिलती है. इसके लिए, Photopea एक अलग विंडो में काम करता है: फ़ाइल मैनेज करने का तरीका.

फ़ाइल मैनेज करने वाले एपीआई का डिक्लेरेटिव हिस्सा

इंस्टॉल करने के बाद, Photopea अपने-आप को ऑपरेटिंग सिस्टम पर एक फ़ाइल हैंडलर के तौर पर रजिस्टर कर लेता है. इसके लिए, यह ऐप्लिकेशन के साथ काम करने वाले अलग-अलग फ़ाइल फ़ॉर्मैट का इस्तेमाल करता है. file_handlers फ़ील्ड को जोड़कर, वेब ऐप्लिकेशन मेनिफ़ेस्ट में ऐसा किया जाता है. इस्तेमाल किया जा सकने वाला हर फ़ाइल टाइप एक ऑब्जेक्ट है. action की वैल्यू के तौर पर, मिलता-जुलता यूआरएल होता है. साथ ही, accept MIME टाइप और उससे जुड़े फ़ाइल एक्सटेंशन का मैप ऑब्जेक्ट होता है. उदाहरण के लिए, {"image/jpeg": [".jpeg", ".jpg"]}. यहां दिया गया कोड, Photopea का वेब ऐप्लिकेशन मेनिफ़ेस्ट है. इसमें काम के हिस्से हाइलाइट किए गए हैं.

{
    "name": "Photopea",
    "short_name": "Photopea",
    "display": "standalone",
    "icons": [
        {  "src": "promo/icon512.png",     "type": "image/png", "sizes": "512x512"  },
        {  "src": "promo/maskable512.png", "type": "image/png", "sizes": "512x512", "purpose":"maskable"  }
    ],
    "start_url": "/?utm_source=homescreen",
    "background_color":"#0f171d",
    "theme_color": "#474747",
    "file_handlers": [
        { "action": "/", "accept": {  "image/psd" : [ ".psd" ]  } },
        { "action": "/", "accept": {  "image/jpeg": [ ".jpeg", ".jpg" ]  } },
        { "action": "/", "accept": {  "image/png" : [ ".png" ]  } },
        { "action": "/", "accept": {  "image/webp": [ ".webp" ]  } },
        { "action": "/", "accept": {  "image/bmp" : [ ".bmp" ]  } },
        { "action": "/", "accept": {  "image/gif" : [ ".gif" ]  } },
        { "action": "/", "accept": {  "image/svg+xml": [ ".svg" ]  } },
        { "action": "/", "accept": {  "image/pdf" : [ ".pdf" ]  } },
        { "action": "/", "accept": {  "image/tiff": [ ".tif", ".tiff" ]  } },
        { "action": "/", "accept": {  "image/ai"  : [ ".ai"  ]  } },
        { "action": "/", "accept": {  "image/psb": [ ".psb" ]  } },
        { "action": "/", "accept": {  "image/xcf": [ ".xcf" ]  } },
        { "action": "/", "accept": {  "image/sketch": [ ".sketch" ]  } },
        { "action": "/", "accept": {  "image/xd" : [ ".xd"  ]  } },
        { "action": "/", "accept": {  "image/pxd": [ ".pxd" ]  } },
        { "action": "/", "accept": {  "image/cdr": [ ".cdr" ]  } },
        { "action": "/", "accept": {  "image/eps": [ ".eps", ".ps" ]  } },
        { "action": "/", "accept": {  "image/x-icon": [ ".ico" ]  } },
        { "action": "/", "accept": {  "image/jpx": [ ".jpx" ]  } },
        { "action": "/", "accept": {  "image/jp2": [ ".jp2" ]  } },
        { "action": "/", "accept": {  "image/x-tga": [ ".tga" ]  } },
        { "action": "/", "accept": {  "image/vnd-ms.dds": [ ".dds" ]  } }
    ],
    "share_target": {
        "action": "/",
        "method": "POST",
        "enctype": "multipart/form-data",
        "params": {
            "files": [
            {
                "name": "image",
                "accept": ["image/jpeg", "image/png", "image/webp", "image/gif"]
            }
          ]
        }
    }
}

macOS Finder पर उपयोगकर्ता, फ़ाइल पर राइट क्लिक करके, Photopea पर 'खोलें' को चुन रहा है.

फ़ाइल मैनेज करने वाले एपीआई का ज़रूरी हिस्सा

इसके बाद, एपीआई का ज़रूरी हिस्सा उन फ़ाइलों को मैनेज करता है जिन्हें ऑपरेटिंग सिस्टम PWA को भेजा जाता है. Photopea का कोड बहुत छोटा और अस्पष्ट है, लेकिन फिर भी नीचे दिए गए स्निपेट की मुख्य जानकारी को समझना इतना मुश्किल नहीं है. LaunchQueue इंटरफ़ेस (जिसे N के तौर पर बताया गया है) का एक setConsumer() तरीका है, जो फ़ंक्शन को तर्क के तौर पर स्वीकार करता है. यह फ़ंक्शन बदले में LaunchParams ऑब्जेक्ट (W के रूप में छोटा किया जाता है) लेता है. इस LaunchParams ऑब्जेक्ट में files प्रॉपर्टी है, जो FileSystemHandle ऑब्जेक्ट के रीड-ओनली अरे पर ले जाती है, जिसे बाकी कोड लूप होने के बाद लूप में चलाते हैं. साथ ही, हर एक ऑब्जेक्ट getFile() को कॉल करके File ऑब्जेक्ट (G के तौर पर कम से कम) हासिल करता है. इसके बाद, यह फ़ाइल Photopea के उस दूसरे लॉजिक को भेज दी जाती है जो फ़ाइल को दिखाता है.

var N = window.launchQueue;
if (N) {
  var $ = this.UA;
  N.setConsumer(function (W) {
    var O = W.files;
    console.log(O);
    for (var Y = 0; Y < O.length; Y++) {
      var T = O[Y];
      T.getFile().then(function (G) {
        $.YO([G], null, null, null, [T]);
      });
    }
  });
}

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

लोग लंबे समय से, Photopea को इमेज के लिए फ़ाइल हैंडलर बनाने का अनुरोध कर रहे हैं. साल 2020 में, जब इस सवाल का जवाब मिला, तब इस सुविधा का इस्तेमाल करना मुश्किल था. हालांकि, एक उत्सुक उपयोगकर्ता ने फ़ाइल मैनेज करने वाले एपीआई को खोज लिया, जो 2022 की शुरुआत में ही शुरुआती चरणों में हुआ था. उस समय यह एपीआई फ़्लैग के पीछे मौजूद था. फ़ाइल मैनेज करने की सुविधा, आखिरकार Chrome 102 में भेज दी गई. Photopea की एक लोकप्रिय सुविधा रही है, जिसे इसके उपयोगकर्ता रोज़ाना इस्तेमाल करते हैं. कुछ लोगों ने इसे गेमचेंजर भी कहा. Photopea को एक बार आज़माएं और उसे अपने डेस्कटॉप पर इंस्टॉल करें. इसके बाद, उस फ़ाइल फ़ॉर्मैट को खोलें जो इसके साथ काम करती है! इमेज एडिटिंग का आनंद लें!