In che modo l'app di modifica delle immagini Photopea utilizza l'API File Handling per consentire agli utenti di aprire file dal proprio Esplora file

L'API File Handling consente alle applicazioni web di registrarsi come gestore di file per i formati di file supportati dall'applicazione. Scopri come l'applicazione di modifica di immagini Photopea utilizza questa API.

Ivan Kutskir
Ivan Kutskir

Introduzione

Questo articolo è disponibile anche sotto forma di video.

Photopea è un editor di immagini online senza costi sviluppato da Ivan Kutskir. Ivan ha iniziato a lavorare all'app nel 2012 e gestisce un blog in cui condivide le principali funzionalità che aggiunge a Photopea. Photopea può funzionare con i formati PSD (Adobe Photoshop), XCF (GIMP), Sketch (Sketch App), XD (Adobe XD) e CDR (CorelDRAW).

L'app Photopea.

Gestione dei file in Photopea

Come PWA installabile, Photopea viene eseguito in una finestra autonoma quando l'utente sceglie di installare l'app. In questo modo sblocca una super potenza della PWA, di cui Photopea fa un uso intensivo: gestione dei file.

La parte dichiarativa dell'API File handling

Dopo l'installazione, Photopea si registra come gestore di file con il sistema operativo per i diversi formati di file supportati. Questa operazione si verifica nel file manifest dell'app web, aggiungendo il campo file_handlers. Ogni tipo di file supportato è un oggetto, il action ha un URL relativo come valore, l'oggetto accept una mappa dei tipi MIME e le estensioni dei file associate. Ad esempio, {"image/jpeg": [".jpeg", ".jpg"]}. Il codice che segue è il file manifest dell'app web di Photopea di produzione, con le parti pertinenti evidenziate.

{
    "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"]
            }
          ]
        }
    }
}

Il Finder di macOS in cui l'utente fa clic con il tasto destro del mouse su un file e sceglie "Apri con" Photopea.

La parte imperativa dell'API File handling

La parte imperativa dell'API si occupa quindi della gestione effettiva dei file che il sistema operativo passa alla PWA. Il codice di Photopea è ovviamente ridotto e brutto, ma il significato dello snippet riportato di seguito non è così difficile da comprendere. L'interfaccia LaunchQueue (minima come N) ha un metodo setConsumer() che accetta una funzione come argomento. Questa funzione a sua volta accetta un oggetto LaunchParams (minimizzato come W) . Questo oggetto LaunchParams ha una proprietà files che punta a un array di sola lettura di oggetti FileSystemHandle a cui il resto del codice viene ripetuto in loop e per ciascuno ottiene l'oggetto File (minimo come G) chiamando getFile(). Il file viene quindi passato ad un'altra logica di Photopea che si occupa di visualizzarlo.

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]);
      });
    }
  });
}

Conclusioni

Gli utenti chiedono da molto tempo che Photopea diventi un gestore di file per le immagini. Nel 2020, quando è apparsa la domanda, questa funzionalità era completamente impensabile, ma un utente impaziente ha scoperto l'API per la gestione dei file nelle sue fasi iniziali, all'inizio del 2022, quando era ancora dietro un flag. Alla fine, la gestione dei file è stata spedita in Chrome 102 ed è stata una funzionalità molto apprezzata da Photopea e utilizzata quotidianamente dai suoi utenti, che alcuni definiscono addirittura una svolta. Assicurati di provare Photopea, installalo sul computer e prova ad aprire uno dei formati file che supporta. Buon divertimento con l'editing delle immagini!