Come funziona davvero la conversione delle immagini nel browser (e perché l’ho costruita così)
Dov Azencot
@DovAzencotIl motivo per cui esiste tutto questo sito è un piccolo, stupido momento di disagio che ho avuto anni fa. Dovevo convertire una foto HEIC in JPG, ho digitato la cosa più ovvia nella barra di ricerca, e sono finito su un convertitore che voleva che caricassi la mia foto sul loro server. Così ho fatto. Ha funzionato. E poi me ne sono stato lì a pensare: quella foto ora si trova su una macchina di cui non so nulla, gestita da persone che non incontrerò mai, conservata per un tempo che nessuno mi ha detto. Per uno screenshot a caso, va bene. Ma non era uno screenshot. Era una foto personale, e l’avevo appena consegnata a degli sconosciuti per risparmiarmi trenta secondi.
È questo il problema che mi sono messo a non avere più. La risposta si è rivelata essere che il caricamento, in partenza, non è mai stato necessario.
Il vecchio modo: affittare il computer di uno sconosciuto
Un convertitore online tradizionale funziona come un servizio per corrispondenza. Spedisci su il tuo file a un server. Il server esegue la conversione usando software installato sulla sua macchina. Ti rispedisce giù il risultato. La tua immagine ha fatto un viaggio di andata e ritorno attraverso hardware che non controlli, e da qualche parte nel mezzo è rimasta, per intero, su un disco che non è tuo.
Ogni promessa di privacy avvitata su quel modello è una promessa sul comportamento — il file viene cancellato dopo un’ora, nessuno guarda. Magari regge. Magari è così. Non hai modo di verificarlo, e gli stai affidando i byte veri e propri del tuo file. La fiducia è l’intera architettura, e la fiducia è esattamente ciò che non volevo spendere.
Il modo nuovo: il tuo browser ha già il computer
Ecco cosa è cambiato. I browser moderni possono eseguire programmi veri e compilati a velocità quasi nativa, attraverso una cosa chiamata WebAssembly — WASM in breve. I codec di immagine che una volta vivevano su un server — il codice che legge un PNG, che codifica un WebP, che decodifica l’HEIC — possono essere compilati in WASM ed eseguiti dentro la scheda del browser che hai già aperta.
Quindi quando posi un file su una pagina costruita così, il software di conversione si scarica sulla tua macchina, una volta, come qualsiasi altra parte della pagina web. Da lì in poi il lavoro vero — leggere la tua immagine, ricodificarla, scrivere il nuovo file — avviene sul tuo processore, nella tua memoria. Il risultato ti viene restituito direttamente come download. Il tuo file non viene mai spedito da nessuna parte, perché non c’è nulla a cui spedirlo. Non c’è alcun server nel giro.
È per questo che posso dire che i tuoi file non lasciano mai il dispositivo e intenderlo come un fatto, non come una policy. Non è che prometto di non guardare. È che non esiste alcun percorso attraverso cui la tua immagine mi raggiunge. Non potrei recuperare la tua foto neanche se me lo ordinasse un tribunale, perché non è mai stata dal mio lato del filo. La privacy non è una funzione che ho aggiunto sopra. È una conseguenza di dove gira il codice.
Come puoi verificarlo
Non devi credermi sulla parola, ed è la parte che mi piace di più. Apri gli strumenti per sviluppatori del browser, tieni d’occhio la scheda di rete e converti un file. Vedrai la pagina e il codec WASM scaricarsi una volta. Non vedrai la tua immagine salire. Meglio ancora: carica la pagina, spegni il Wi-Fi e converti comunque qualcosa. Funziona lo stesso, perché tutto ciò che serve è già sulla tua macchina. Uno strumento che carica i tuoi file non può farlo. Questo sì.
L’unico vero limite
Ho promesso onestà, quindi eccola. Eseguire la conversione sul tuo dispositivo significa che usa la tua memoria, e una scheda del browser non dispone di memoria infinita con cui giocare.
Per i file normali — foto, screenshot, loghi, la roba che la gente converte tutto il giorno — è un non problema. Ma se ci butti dentro qualcosa di davvero mostruoso, una singola immagine a risoluzione estrema, o un lotto enorme tutto in una volta, puoi toccare il tetto. Decodificare un’immagine significa tenerne i pixel non compressi in memoria, che è molto più ingombrante del file su disco, e un’immagine gigantesca può esaurire ciò che la scheda ha a disposizione. Quando succede la conversione rallenta fino a strisciare o la scheda si arrende.
Un server con 64 GB di RAM quel problema non ce l’ha mai. Ecco quindi lo scambio, detto chiaro: un convertitore lato server può divorare file più grandi di quanto il tuo dispositivo potrebbe mai gestire. Questo approccio no. Quello che ti dà in cambio è che il tuo file non lascia mai le tue mani. Per la stragrande maggioranza di ciò che la gente converte davvero, è uno scambio che vale la pena fare senza pensarci due volte. Per un raro file mostruoso è un limite reale, e preferisco dirtelo piuttosto che far finta di niente.
Perché resto convinto che sia il valore predefinito giusto
Quasi tutte le conversioni sono file ordinari che non avevano bisogno di toccare un server in partenza. Il caricamento è sempre stato un residuo di un’epoca in cui i browser non sapevano fare questo lavoro da soli. Adesso lo sanno fare. Quindi il valore predefinito sensato si è ribaltato: tieni il file sulla tua macchina, fai il lavoro localmente, e ricorri a un server solo nella rara occasione in cui il tuo hardware davvero non ce la fa.
È tutta qui l’idea dietro tutto quello che trovi qui. È lo stesso sito che ho costruito per me dopo quel pomeriggio a disagio, così da non dover mai più consegnare una foto personale a uno sconosciuto solo per cambiarne l’estensione. A quanto pare non ho mai dovuto farlo. Neanche tu.
Articoli correlati
Perché converto i PNG in WebP (e l’unica volta in cui non lo faccio)
Il PNG è un formato splendido in cui lavorare e uno spreco da pubblicare. Ecco cosa ti fa risparmiare davvero il WebP, dove non serve a niente, e l’unica regola che non infrango mai.
PNG o JPG? La regola che uso da dieci anni per decidere
Senza perdita o con perdita, bordi o fotografie, trasparenza o niente. Una sola domanda ti dice che formato dovrebbe avere un file — con una tabella di pesi reali a dimostrarlo.
Perché le foto dell’iPhone sono in HEIC (e quando conviene farne dei JPG)
L’HEIC è davvero un formato migliore, ma metà del web ancora non riesce ad aprirlo. Ecco perché Apple l’ha scelto, cosa perdi convertendo in JPG e quando non mi ci metto nemmeno.
Tutti gli articoli