Pregătești
Vous choisissez le contenu du code ou le fichier que vous souhaitez transmettre.
Outils dans le navigateur Instrument public
MEGA QR inclut un générateur de codes et un outil de transfert optique. Vous créez un code pour un lien, le Wi-Fi ou un contact ; pour le transfert, un écran affiche une succession de codes que la caméra de l’autre appareil reconstruit en un fichier.

MEGA QR
Vous choisissez le contenu du code ou le fichier que vous souhaitez transmettre.
Le générateur produit l’image QR. Le transfert optique affiche des images successives.
La caméra lit le code ou additionne les images jusqu’à pouvoir reconstruire le fichier.
Lien, Wi-Fi, contact et autres types de contenu ; export PNG ou SVG.
Données transmises entre l’écran et la caméra, sans connexion réseau entre les appareils.
La génération et la reconstruction se font dans le navigateur, sans compte utilisateur.
Le transfert optique dépend de la caméra, de la lumière, de la distance et de l’écran. L’appareil qui transmet ne reçoit pas la confirmation de réception. Un code affiché publiquement peut être lu par ceux qui le voient.
MEGA QR en détail
MEGA QR sont deux outils sur le même domaine, et le second ne ressemble pas du tout au premier. Le générateur crée des codes QR pour huit types de contenu : lien, texte, Wi-Fi, carte de visite, WhatsApp, e-mail, SMS, téléphone et coordonnées. Le transfert optique déplace un fichier entier d’un écran vers une caméra, sans câble, sans Bluetooth, sans réseau entre les deux appareils.
Les deux fonctionnent entièrement dans le navigateur. Les pages n’effectuent aucune requête vers des tiers, et les deux binaires WebAssembly dont dépend le transfert sont servis depuis public/wasm/, et non depuis un CDN — sinon la promesse que rien ne quitte l’appareil serait fausse. Un mot de passe Wi-Fi saisi dans le générateur n’atteint jamais un serveur.
L’idée qu’il faut comprendre à propos du transfert : un écran émet de la lumière, une caméra la lit, et le récepteur n’a aucun moyen de demander quoi que ce soit en retour. Il n’existe pas de canal de retour. De ce fait découle tout le reste — les cadres se décrivent eux-mêmes, leur ordre n’a pas d’importance, tout sous-ensemble suffisamment grand reconstruit le fichier, et l’expéditeur ne peut jamais savoir si quelque chose est arrivé.
Lien, texte, WiFi, vCard, WhatsApp, email, SMS, téléphone et géolocalisation. Quand vous ajoutez un logo, le niveau de correction d’erreurs passe de force à H, le plus élevé — un logo crée un trou dans la zone de données et le code ne survit pas autrement. Le logo est plafonné à 35 % de la surface, avec un avertissement à partir de 30 %. L’export est rendu séparément de l’aperçu, afin qu’un PNG de 4096 px ne perturbe pas ce qui est à l’écran.
La bibliothèque de génération, qr-code-styling 1.9.2, convertit son texte avec charCodeAt(i) & 0xFF et coupe silencieusement chaque diacritique roumain et tout le cyrillique : « Ștefan Țurcanu » se scannait en retour comme « tefan urcanu ». Nous encodons en UTF-8 avant qu’elle le voie, afin que son troncage n’ait plus rien à couper. Les charges utiles WiFi et vCard sont elles aussi échappées — un « ; » dans un mot de passe ou une virgule dans un nom d’entreprise corrompaient autrement le code, sans aucun signe.
Le fichier est emballé dans une enveloppe (nom, type MIME, taille, SHA-256), compressé avec gzip s’il devient plus petit, puis passé dans RaptorQ (RFC 6330). Chaque cadre porte un en-tête fixe de 20 octets et un ou plusieurs paquets. Peu importe quels cadres vous captez, ce qui compte c’est combien : tout sous-ensemble suffisamment grand reconstruit le fichier. Mesuré en pixels réellement rendus, la surcharge RaptorQ est de 1,000x — les codes LT utilisés par les projets de référence exigent 1,15x.
Le second mode d’envoi est une boucle fixe qui se répète à l’infini, sans session et sans personne pour appuyer sur start. La longueur de la boucle voyage dans chaque cadre, de sorte qu’un passant qui pointe la caméra sait dès le premier code capté combien de temps tout cela dure, au lieu de voir une roulette. La configuration de référence est de 36 cadres à 12 par seconde — une boucle de trois secondes qui transmet 25 KB à partir d’un seul code noir et blanc simple. Un menu entier, ou l’horaire complet d’une station.
Le nombre de codes à l’écran, la couleur et la version QR sont trois contraintes différentes et se règlent séparément. L’échelle de densité comporte 29 niveaux, de v10 sur une seule bande (7 KB/s à 30 cadres par seconde) jusqu’à v39 sur quatre bandes en couleur (959 KB/s). Il existe aussi une échelle complète sans couleur, jusqu’à 320 KB/s, parce qu’une caméra dont la chrominance meurt ne doit pas rester bloquée sur une seule bande.
Données et fonctionnement
De l'exploration à l'implémentation
Un code QR mène à un contenu court et, s’il s’agit d’un lien, à une page que vous pouvez modifier par la suite — le code imprimé ne change pas lui-même de destination. Le transfert optique déplace un fichier entre deux appareils qui n’ont pas le droit ou ne peuvent pas communiquer par le réseau. Ce sont des tâches différentes, et la confusion entre elles est la plus fréquente.
Pour l’impression : contraste, taille finale, zone libre autour, testé à la taille à laquelle il sera collé. Pour le transfert : quelle taille un module atteint sur le capteur de la caméra. Sous un modèle dur de lentille (grille de chrominance décalée d’un pixel plus un flou 3x3), la couleur renvoie les trois codes à 4 pixels du dispositif par module et absolument rien à 2. C’est la vraie limite, et c’est pourquoi la couleur est un choix humain, pas celui du contrôleur.
Notre suite passe par une chaîne de caméras authentique — les images sont écrites en YUV 4:2:0 et données à Chrome comme une fausse webcam, donc la sous-échantillonnage de la chrominance est réel. Ce qu’elle n’a pas : objectif, reflets, mouvement, obturateur roulant. Dix minutes avec un vrai téléphone donnent le premier chiffre honnête et constituent l’étape suivante de notre liste de travail, pas un détail.
À travers une chaîne de caméra simulée, à 10 images par seconde, avec des codes remplissant la majeure partie de l’image à 3-5 pixels de caméra par module, les quatre configurations sont sorties avec hash vérifié : noir et blanc sur une bande 15,8 KB/s, noir et blanc sur quatre bandes 37,7 KB/s, couleur sur une bande 40,1 KB/s, couleur sur quatre bandes 115,7 KB/s. La couleur sur une seule bande bat le noir et blanc sur quatre. Le taux d’échec a été nul partout. Retenez d’où viennent les chiffres : cadres géométriques parfaits, sans objectif et sans mouvement. Un vrai téléphone n’a pas encore été placé devant eux.
La caméra est demandée en 1920x1080 à 30 images par seconde, avec préférence pour celle à l’arrière ; si Android refuse la contrainte, nous tombons sur n’importe quelle caméra. Chaque image capturée est réduite à 1280 px sur le côté long avant le décodage. Ce qui compte vraiment, ce n’est pas la résolution, mais combien de pixels du capteur tombent sur un module : le noir et blanc a besoin d’environ trois, la couleur d’environ le double, parce que la chaîne vidéo du téléphone fournit généralement du 4:2:0 et divise par deux les deux plans de couleur dans les deux directions. Le détail fin de couleur est la première chose qu’une vraie caméra détruit.
Parce que la seule chose que l’appareil qui envoie peut mesurer est combien de symboles ses propres encodeurs ont produits par rapport à combien lui en ont été demandés — une affirmation sur un processeur, pas sur une caméra située à deux paumes. Un ordinateur portable ne rate jamais une marche, donc un contrôleur qui lit « zéro ratés » comme « continue » monte jusqu’au sommet et met à l’écran quatre codes qui changent trente fois par seconde, que rien ne peut scanner. Cela a réellement été livré une fois, et une personne l’a trouvé en une minute. Maintenant, le mode automatique est plafonné à une bande, noir et blanc, version 26 et 15 images par seconde. 15 n’est pas un chiffre rond : une caméra de téléphone enregistre à 30 et n’est pas synchronisée avec l’écran, donc une image doit rester affichée pendant deux expositions consécutives — 67 ms — pour être capturée entière.
Rien de spécial, et c’est tout l’intérêt. Il n’y a pas de numéros d’ordre à récupérer. L’encodeur produit des paquets de réparation à hauteur de 2x par rapport aux symboles source — mesuré sur ce code : à 60% de perte d’images, un ensemble d’environ 2x K récupère 2 MB sans que la liste soit jamais rejouée une deuxième fois. Le plafond absolu est de 60.000 paquets ; au-delà, l’expéditeur reprend simplement la liste plus souvent, ce qui coûte du temps, pas de la mémoire. Si malgré tout quelque chose se passe mal, le hash SHA-256 le détecte et le transfert échoue explicitement au lieu de livrer un fichier corrompu.
Non, et ce n’est pas une omission. Il n’existe pas de canal de retour — un écran émet de la lumière, et la lumière ne revient pas avec des confirmations. La finalisation se voit sur l’appareil qui reçoit. Toute interface qui prétendrait le contraire mentirait, et nous avons déjà eu une fois un test qui fournissait exactement cette preuve que le produit n’a jamais : la simulation calculait son taux d’échec à partir de ce que la caméra simulée parvenait à résoudre. C’est un canal de retour. Quand un test et le code livré ne sont pas d’accord sur ce qu’il est possible de savoir, c’est le test qui ment.
32 MB, refusé à la sélection s’il est plus grand. La limite ne vient pas du protocole, mais de la mémoire d’un onglet de navigateur : RaptorQ matérialise tous les paquets d’un coup, et un fichier de 50 MB avec un rapport de 2x représenterait 150 MB de tableaux vivants, assez pour tuer l’onglet d’un téléphone. Le codage s’exécute de manière synchrone sur le fil principal, mesuré à 2,5 secondes pour 32 MB sur ordinateur. Ce qui circule effectivement n’est pas la taille du fichier : l’enveloppe est compressée avec gzip avant RaptorQ, donc un tableau de 1 MB représente quelques kilooctets de paquets, et une photo de 1 MB représente un mégaoctet de paquets.
Ni l’un ni l’autre. Il n’y a pas de compte et il n’y a pas d’abonnement. Après la première visite, les pages fonctionnent sans réseau, car tout — y compris les deux binaires WebAssembly — est servi depuis leur propre domaine. Il vaut aussi la peine de préciser ce que nous avons appris en route : un service worker enregistré ne signifie pas prise en charge hors ligne. Au premier chargement, la page et ses ressources sont récupérées avant que le worker ne prenne le contrôle, donc son handler ne les voit jamais. La page signale ses propres ressources via l’API Performance au lieu de supposer.
Exemple illustratif
Un scénario d’utilisation, sans données client ni résultats commerciaux attribués.
Un écran dans une station ou une vitrine doit donner aux passants un fichier — l’horaire complet, le menu, un formulaire — sans WiFi public, sans compte et sans que quelqu’un touche à quoi que ce soit.
L’écran affiche un carrousel : 36 images à 12 par seconde, un tour de trois secondes qui se répète à l’infini. La densité est fixe pendant le carrousel, car un tour n’est une promesse que si sa longueur est respectée. La longueur du tour circule dans chaque image, donc un téléphone qui capture le premier code sait immédiatement combien de temps dure l’ensemble.
Le passant filme trois secondes et obtient 25 KB reconstruits dans son navigateur, vérifiés avec SHA-256, à partir d’un seul code noir et blanc simple. L’écran ne sait pas qu’il a été lu et ne peut pas le savoir.
Ce este necesar:Un ecran care poate ține un cadru afișat 83 ms fără sfâșiere, lumină în care codul nu e spălat de reflexii, și o cameră care rezolvă aproximativ trei pixeli de senzor per modul. Cifra de 25 KB e derivată din aceleași funcții pe care le folosește expeditorul, nu tastată de mână alături de ele.
Possibilités de collaboration
Codes pour l’accès à des informations publiques, à des instructions ou à des contacts ; transfert optique de fichiers entre appareils compatibles, avec évaluation des politiques de sécurité de l’institution.
Nous définissons un pilote autour d’un processus réel : utilisateurs, données, intégrations, coûts et critères d’acceptation. L’extension suit après l’évaluation du résultat.
Nous établissons les exigences d’accessibilité, d’hébergement, de protection des données et d’interopérabilité. Toute connexion avec des services AGE ou STISC nécessite la validation de l’éligibilité, de l’accès et des approbations.
Ce sont des scénarios d’adaptation, non des déclarations sur des contrats ou partenariats existants. Les fonctions proposées sont confirmées dans le périmètre de travail du projet.
Discuter d'un piloteonGDPR.md vérifie la surface publique d'un site : cookies, traceurs, formulaires et documents d'information.
Plateforme publiqueMegaforms explore la collecte de réponses par formulaires conversationnels, réponses vocales et transcription comprises.
Développement & démonstrationsNous construisons une plateforme pour les menus numériques et les opérations accessibles par QR.
Développement & démonstrationsRacontez-nous votre processus. Ensemble, nous décidons ce qui vaut la peine d'être construit, ce que nous pouvons connecter et comment nous vérifions le résultat.