Comment ça marche
Ce qui arrive à votre fichier et comment choisir les réglages
Chaque décodage, redimensionnement et encodage a lieu sur votre appareil. Voici ce que fait chaque étape, ce que change chaque réglage et où l'outil s'arrête.
1. Votre navigateur lit le fichier
La zone de dépôt confie le fichier à l'API File, puis à un Web Worker de cet appareil. Il n'y a aucune étape d'envoi.
2. Un codec travaille sur les pixels
Des modules WebAssembly construits à partir de MozJPEG, du codec PNG de Squoosh, d'oxipng, de libwebp et de libavif décodent et encodent l'image hors du thread principal, et des ports Rust la redimensionnent, si bien que la page reste utilisable. Chaque module porte sa propre licence, et la page de crédits les liste.
3. Vous téléchargez le résultat
Chaque fichier terminé a son propre lien de téléchargement, sa taille avant et après, et un aperçu de ce que vous allez obtenir.
Où se fait le travail
Votre fichier n’atteint jamais un serveur, et le résultat non plus. La page lit le fichier avec l’API File, qui donne au navigateur un accès à des octets déjà présents sur votre disque ; elle ne les envoie pas. Ces octets partent vers un Web Worker, un thread d’arrière-plan, si bien qu’un long lot ne fige pas la page que vous lisez. Dans ce worker, les codecs transforment votre image en simples pixels de 8 bits, la redimensionnent si vous l’avez demandé, et encodent le résultat dans le format choisi.
Les codecs sont des modules WebAssembly construits à partir de MozJPEG, du codec PNG de Squoosh, d’oxipng, de libwebp et de libavif, plus des ports Rust pour l’étape de redimensionnement. La page des crédits nomme chacun avec sa propre licence, parce que la licence d’un paquet enveloppe n’est pas celle du codec. Un module est téléchargé depuis ce site la première fois que vous utilisez son format, et c’est pourquoi la première conversion dans un format donné est plus lente que les suivantes. Rien n’est téléchargé ailleurs, et aucune requête ne transporte votre fichier.
Choisir un réglage de qualité
La qualité est un nombre entier de 1 à 100, et elle commence à 75. Elle s’applique au JPEG, au WebP et à l’AVIF, qui sont tous des formats avec perte : un nombre plus bas consacre moins de bits à l’image, un nombre plus haut en consacre davantage. Le PNG est sans perte : il ignore complètement ce réglage, et l’outil le dit tant que le PNG est sélectionné.
Aucune extrémité de l’échelle n’est gratuite. À 1, l’image garde sa forme mais perd son détail, et le détail qui disparaît en premier dépend de l’image et de l’encodeur, donc cette page ne promet aucun ordre. À 100, le fichier est volumineux et n’est toujours pas tout à fait l’original, parce que l’encodeur reconstruit l’image à partir d’une description compressée. Si vous ne savez pas par où commencer, laissez la valeur à 75 et comparez les deux aperçus que chaque ligne terminée affiche : celui de gauche est le fichier que vous avez choisi, celui de droite est ce que vous téléchargerez.
Choisir une taille
Le redimensionnement est désactivé jusqu’à ce que vous l’activiez. En largeur, la sortie fait autant de pixels de large et conserve les proportions de l’image : une photo au format 3:2 réglée sur une largeur de 1280 sort en 1280 sur 853. En pourcentage, les deux dimensions deviennent cette part de l’original. Le champ en pourcentage s’arrête à 100, donc le mode pourcentage ne peut pas agrandir une image ; une largeur que vous réglez au-dessus de l’original l’agrandit, ce qui rend rarement un fichier plus petit, et c’est pourquoi le champ en pourcentage est le plus sûr des deux.
Si votre appareil photo a enregistré une rotation dans le fichier, cette rotation est appliquée aux pixels avant tout le reste, si bien qu’une photo prise en portrait sort à l’endroit. Les quatre orientations qui comportent un quart de tour, EXIF 5 à 8, inversent la largeur et la hauteur, si bien qu’une photo marquée 6 sort en 400 sur 600 depuis un fichier dont les chiffres affichent 600 sur 400. Les quatre autres laissent les deux nombres tels quels : aucun changement du tout, les deux orientations en miroir, et le tour de 180 degrés, qui fait pivoter l’image sur le côté sans la rendre plus haute ni plus large.
Un format d’entrée ne transmet même pas cette rotation à l’outil : le bloc EXIF d’une entrée AVIF n’est pas lu, si bien qu’un fichier AVIF qui stocke une orientation est utilisé tel qu’il est stocké, avec les dimensions que son fichier déclare.
Atteindre une taille limite
Les formulaires et les serveurs demandent souvent un fichier sous un certain nombre de kilo-octets plutôt que simplement plus petit. Le champ de taille cible prend ce nombre en Kio, ce qui vaut 1024 octets et non 1000, et l’outil travaille vers lui : si le premier encodage dépasse le nombre, il abaisse la qualité, jusqu’à 1, jusqu’à ce que le fichier tienne, et si le premier encodage arrive nettement en dessous, il relève la qualité depuis votre réglage, jamais au-delà de 100, cherchant la plus haute qualité qui tient encore. La ligne vous dit ensuite si le fichier que vous obtenez est à la cible ou en dessous.
Trois limites honnêtes. La recherche ne peut dépenser que de la qualité, et seule sa moitié vers le haut est bornée par votre réglage, si bien qu’une image encore au-dessus de la cible à la qualité 1 ne l’atteindra pas, et ce que vous obtenez alors est l’encodage à la qualité 1. Dans l’autre sens, une cible supérieure à ce que la qualité 100 peut atteindre pour cette image ne peut pas être remplie en grossissant le fichier, parce que l’échelle s’arrête à 100 : vous obtenez le plus gros fichier que le format a produit, qui est toujours sous votre nombre, et la ligne signale la cible comme atteinte, parce que le fichier est sous le plafond. Et le PNG ignore le réglage de qualité, si bien que la recherche n’a rien à dépenser là : une sortie PNG passe tout de même une seconde fois par oxipng, ce qui peut renvoyer moins d’octets que le premier encodage, si bien qu’une cible PNG que le premier encodage a manquée peut encore être atteinte, et une qu’aucune des deux passes n’atteint est signalée comme manquée.
Une cible est un plafond avec un plancher à 95% de celui-ci, pas une taille à viser. La qualité avance par nombres entiers, et un pas peut sauter par-dessus toute la bande, si bien que la recherche vise la bande et y tombe quand un pas y tombe, et renvoie l’encodage le plus proche sous votre cible quand aucun pas n’y tombe. Elle ne promet ni une taille exacte ni un fichier à moins de 5% de votre nombre, et le nombre qu’elle signale est de savoir si le fichier qu’elle va vous remettre est à votre cible ou en dessous.
C’est cette dernière phrase qui décide du verdict. Les octets sont comptés après qu’un bloc EXIF a été écrit, si bien que si vous demandez à conserver les métadonnées et que le bloc pousse le fichier au-dessus de votre cible, la ligne dit que la cible a été manquée même si l’encodage seul était en dessous. On ne vous dira jamais qu’une limite a été respectée quand le fichier que vous téléchargez la dépasse.
Quand un fichier est refusé
Les deux limites sont vérifiées à des moments différents, et la différence vaut la peine d’être connue. Un fichier de plus de 32 Mio est écarté sur sa seule taille, avant que ses octets soient lus, si bien qu’il ne coûte rien. Un fichier de plus de 40 000 000 pixels doit être lu en entier d’abord, parce que son nombre de pixels n’est connu qu’une fois son en-tête analysé : une image trop grande est donc lue puis écartée avant que quoi que ce soit ne décode ses pixels.
La ligne nomme la limite qui l’a refusé dans les deux cas. Un fichier refusé n’arrête jamais le lot : tous les autres fichiers que vous avez choisis se terminent. Aucune de ces limites ne dépend de la machine que vous utilisez. Ce sont des nombres fixes, et non une lecture de la mémoire, si bien qu’un ordinateur plus rapide ou plus petit ne les augmente pas. Ce qui les change, c’est l’entrée : recadrez l’image, réduisez-la ailleurs, ou divisez le travail, puis choisissez les fichiers de nouveau (choisir remplace la liste).
Une entrée que l’outil ne peut décoder du tout, parce qu’elle est endommagée ou tronquée, reçoit une ligne qui le dit au même endroit. Un fichier chiffré ne peut pas être ouvert ici : il n’y a pas de champ de mot de passe, et aucune partie de votre fichier n’est envoyée quelque part pour être déchiffrée.
Un échec concerne le navigateur plutôt que l’image. Si le worker qui convertit un fichier ne peut pas être démarré, ou meurt en cours de route, ce fichier reçoit une ligne qui dit que le navigateur n’a pas pu exécuter le moteur d’images, et ce worker ne prend plus aucun fichier. Les autres workers poursuivent le reste de la file, et les lignes qui s’étaient déjà terminées gardent leurs résultats. Si tous les workers échouent, alors chaque fichier qui n’avait pas déjà commencé reçoit cette même ligne au lieu d’attendre : la conversion se termine avec une réponse pour chacun au lieu de bloquer sur les fichiers qu’aucun worker n’a atteints. Un fichier qui échoue seulement à être décodé ou encodé n’est pas ce cas : c’est l’erreur de cette ligne, et le worker qui l’a signalée passe au fichier suivant. Essayez une version actuelle de Chrome, Firefox, Edge ou Safari.
Prêt à l'essayer sur vos propres images ?
L'outil est sur la page d'accueil. Déposez quelques fichiers et comparez les tailles côte à côte.