Comment fonctionne vraiment la conversion d’images dans le navigateur (et pourquoi je l’ai bâtie ainsi)
Dov Azencot
@DovAzencotLa raison d’être de tout ce site, c’est un petit moment de malaise idiot que j’ai eu il y a des années. J’avais besoin de convertir une photo HEIC en JPG, j’ai tapé la chose évidente dans une barre de recherche, et je suis tombé sur un convertisseur qui voulait que j’envoie mon image sur son serveur. Je l’ai fait. Ça a marché. Et puis je suis resté là à me dire : cette photo est maintenant posée sur une machine dont je ne sais rien, tenue par des gens que je ne rencontrerai jamais, conservée pour une durée qu’on ne m’a jamais indiquée. Pour une capture d’écran quelconque, d’accord. Mais ce n’était pas une capture. C’était une photo personnelle, et je venais de la remettre à des inconnus pour m’épargner trente secondes.
C’est le problème que je me suis juré de ne plus jamais avoir. La réponse, il s’est avéré, c’est que l’envoi n’avait jamais été nécessaire au départ.
L’ancienne méthode : louer l’ordinateur d’un inconnu
Un convertisseur en ligne classique fonctionne comme un service par correspondance. Vous envoyez votre fichier vers un serveur. Le serveur exécute la conversion avec un logiciel installé sur sa machine. Il vous renvoie le résultat. Votre image a fait un aller-retour à travers du matériel que vous ne maîtrisez pas, et quelque part au milieu, elle est restée, en entier, sur un disque qui n’est pas le vôtre.
Chaque promesse de confidentialité vissée sur ce modèle est une promesse sur un comportement — le fichier est supprimé au bout d’une heure, personne ne regarde. Peut-être que ça tient. Peut-être. Vous n’avez aucun moyen de vérifier, et vous confiez à ce système les octets mêmes de votre fichier. La confiance est toute l’architecture, et la confiance est précisément ce que je ne voulais pas dépenser.
La nouvelle méthode : votre navigateur a déjà l’ordinateur
Voici ce qui a changé. Les navigateurs modernes savent exécuter de vrais programmes compilés à une vitesse quasi native, grâce à une technologie appelée WebAssembly — WASM en abrégé. Les codecs d’image qui vivaient autrefois sur un serveur — le code qui lit un PNG, qui encode un WebP, qui décode le HEIC — peuvent être compilés en WASM et s’exécuter à l’intérieur de l’onglet du navigateur que vous avez déjà ouvert.
Alors, quand vous déposez un fichier sur une page bâtie de cette façon, le logiciel de conversion se télécharge sur votre machine, une fois, comme n’importe quel autre élément de la page web. À partir de là, le vrai travail — lire votre image, la transcoder, écrire le nouveau fichier — se passe sur votre propre processeur, dans votre propre mémoire. Le résultat vous est rendu directement sous forme de téléchargement. Votre fichier n’est jamais envoyé nulle part, parce qu’il n’y a nulle part où l’envoyer. Il n’y a aucun serveur dans la boucle.
C’est pour ça que je peux dire que vos fichiers ne quittent jamais votre appareil, et le dire comme un fait plutôt que comme une politique. Ce n’est pas que je promets de ne pas regarder. C’est qu’il n’existe aucun chemin par lequel votre image me parviendrait. Je ne pourrais pas récupérer votre photo même sur décision de justice, parce qu’elle n’a jamais été de mon côté du fil. La confidentialité n’est pas une fonctionnalité ajoutée par-dessus. C’est une conséquence de l’endroit où le code s’exécute.
Comment vous pouvez le vérifier
Vous n’êtes pas obligé de me croire sur parole, et c’est la partie que je préfère. Ouvrez les outils de développement de votre navigateur, surveillez l’onglet réseau, et convertissez un fichier. Vous verrez la page et le codec WASM se télécharger une fois. Vous ne verrez pas votre image partir. Mieux encore : chargez la page, coupez votre Wi-Fi, et convertissez quelque chose quand même. Ça marche toujours, parce que tout ce dont l’outil a besoin est déjà sur votre machine. Un outil qui envoie vos fichiers ne peut pas faire ça. Celui-ci le peut.
La seule vraie limite
J’ai promis d’être honnête, alors la voici. Faire tourner la conversion sur votre propre appareil, ça veut dire qu’elle utilise votre propre mémoire, et un onglet de navigateur ne dispose pas d’une mémoire infinie.
Pour des fichiers normaux — photos, captures, logos, ce que les gens convertissent à longueur de journée — c’est un non-sujet. Mais si vous lui lancez quelque chose de vraiment gigantesque, une seule image en résolution extrême, ou un énorme lot d’un coup, vous pouvez atteindre le plafond. Décoder une image, ça veut dire garder ses pixels décompressés en mémoire, ce qui est bien plus volumineux que le fichier sur le disque, et une image géante peut épuiser ce que l’onglet a le droit d’utiliser. Quand ça arrive, la conversion ralentit à l’extrême ou l’onglet abandonne.
Un serveur doté de 64 Go de RAM n’a jamais ce problème. Voilà donc le compromis, dit sans détour : un convertisseur côté serveur peut avaler des fichiers plus gros que votre appareil ne pourrait jamais gérer. Cette approche, non. Ce qu’elle vous donne en échange, c’est que votre fichier ne quitte jamais vos mains. Pour l’écrasante majorité de ce que les gens convertissent réellement, c’est un compromis à faire sans y réfléchir à deux fois. Pour un rare fichier monstrueux, c’est une vraie limite, et je préfère vous le dire plutôt que faire comme si de rien n’était.
Pourquoi je pense que ça reste le bon choix par défaut
La plupart des conversions portent sur des fichiers ordinaires qui n’avaient jamais eu besoin de toucher un serveur au départ. L’envoi a toujours été un vestige d’une époque où les navigateurs ne savaient pas faire ce travail eux-mêmes. Ils le savent, maintenant. Le choix par défaut raisonnable s’est donc inversé : gardez le fichier sur votre machine, faites le travail en local, et ne sortez le serveur que dans la rare occasion où votre propre matériel ne s’en sort vraiment pas.
C’est toute l’idée derrière tout ce qui se trouve ici. C’est le même site que j’ai bâti pour moi après cet après-midi de malaise, pour ne plus jamais avoir à remettre une photo personnelle à un inconnu juste pour changer son extension de fichier. Il s’est avéré que je n’avais jamais eu à le faire. Vous non plus.
Articles liés
Pourquoi je convertis mes PNG en WebP (et la seule fois où je m’abstiens)
Le PNG est génial pour éditer, ruineux pour publier. Voici ce que le WebP fait vraiment gagner, là où il ne sert à rien, et l’unique règle que je ne transgresse jamais.
PNG ou JPG ? La règle qui me sert à trancher depuis dix ans
Sans perte contre avec perte, contours contre photographies, transparence ou pas. Une seule question simple vous dit quel format un fichier devrait avoir — avec un vrai tableau de tailles pour le prouver.
Pourquoi vos photos iPhone sont en HEIC (et quand les passer simplement en JPG)
Le HEIC est un format réellement meilleur que la moitié du web n’ouvre toujours pas. Voici pourquoi Apple l’a choisi, ce que vous perdez vraiment en passant au JPG, et les cas où je ne m’en préoccupe pas.
Tous les articles