Métriques emoji CreepJS : ensembles et sommes
Interprétez emojiSet et textMetricsSystemSum dans le code CreepJS : représentants, somme avec perte et inclusion des champs ne prouvent pas un système d’exploitation.
BotBrowser Team
Vous voulez la documentation structurée pour Empreinte ?
Cet article fait partie de la bibliothèque éditoriale. Pour les étapes de configuration, la référence et les mises à jour continues, passez directement à la section docs.
Les métriques emoji de CreepJS décrivent la géométrie du texte et son regroupement par la bibliothèque. Les noms emojiSet et textMetricsSystemSum ne transforment pas ces mesures en certificat de système d’exploitation. BotBrowser documente des polices liées aux profils et des polices de repli pour les emojis, mais ne garantit pas des valeurs identiques pour toutes les métriques textuelles et ne détermine pas un système à partir d’un résumé CreepJS.
Les éléments pertinents sont le code public de la révision 10aa6724cd33a1015db1574211890518cd04f0cc, inspecté le 2026-11-02. Le bloc canvas cité choisit des représentants et calcule une somme ; le bloc d’assemblage décide des champs conservés. Aucun n’attribue une étiquette de système. Il s’agit d’une interprétation du code, pas d’une comparaison exécutée dans des navigateurs ni d’une affirmation sur toutes les inférences présentes ailleurs dans CreepJS.
Résumé
emojiSetconserve le premier emoji rencontré pour chaque tuple distinct de sept métriques textuelles. Ce n’est pas un inventaire complet des emojis pris en charge.textMetricsSystemSumagrège les tuples uniques au lieu de pondérer séparément chaque emoji d’entrée. Le résumé perd de l’information.- L’assemblage vérifie
liedpour les pixels et, séparément,liedTextMetricspour les métriques. Une absence exige le contexte de la branche. - Une géométrie égale ne prouve ni des pixels identiques, ni le même fichier de police, ni le même système. Un classificateur de système demanderait des preuves extérieures à ces blocs.
- Comparez révision, composition des métriques et étape d’inclusion avant les résumés. Évitez les données brutes d’empreinte dans les journaux ordinaires d’assistance.
Sommaire
- Sept métriques décrivent une géométrie
- Les représentants ne sont pas un inventaire de prise en charge
- Une somme abandonne la structure résumée
- Pixels et métriques ont des conditions distinctes
- Comparer des rapports exige leur provenance
- Les contrôles typographiques BotBrowser ont une portée limitée
- Conclusion pratique
Sept métriques décrivent une géométrie
L’objet mesuré n’est pas une image
Le code canvas CreepJS fixé à une révision appelle context.measureText(emoji) et lit sept propriétés : actualBoundingBoxAscent, actualBoundingBoxDescent, actualBoundingBoxLeft, actualBoundingBoxRight, fontBoundingBoxAscent, fontBoundingBoxDescent et width. Il joint ces valeurs en une représentation de tuple. Ce tuple, et non l’image peinte de l’emoji, devient la clé de déduplication.
La référence MDN de measureText décrit l’objet TextMetrics renvoyé. La référence TextMetrics distingue la largeur d’avance des dimensions des boîtes et précise leurs unités en pixels CSS. Une égalité de width est donc moins exigeante qu’une égalité des sept propriétés choisies. Aucune de ces comparaisons n’inclut les couleurs individuelles ou les pixels de bord d’un glyphe rendu.
La distinction compte lorsque deux rapports déclarent qu’un emoji « correspond ». L’un peut comparer la largeur, un autre le tuple sélectionné, un troisième une image rendue. Les comparaisons et leurs entrées diffèrent. L’explication de l’empreinte par mesure du texte sépare géométrie, sortie raster et état de chargement des polices. Une affirmation d’égalité doit nommer sa couche plutôt que faire passer une égalité métrique pour une égalité d’image.
La sélection des polices est une autre dépendance
La spécification de correspondance CSS Fonts décrit la sélection et le repli des polices. Le nom d’une famille demandée ne prouve pas que chaque caractère provient du même fichier. La géométrie obtenue par measureText() n’est donc pas un inventaire de fichiers. Comparer des tuples ne reconstitue pas un parcours de sélection non enregistré au seul motif qu’un nom de famille figure dans un réglage canvas.
La spécification emoji d’Unicode distingue les demandes de présentation textuelle et emoji. Présentation et repli sont des éléments de contexte, mais les propriétés TextMetrics choisies restent des mesures de la disposition résultante. Une note d’assistance ne devrait pas remplacer la séquence d’entrée réelle par une capture visuellement proche : la ressemblance ne conserve pas la demande de présentation d’origine.
Les représentants ne sont pas un inventaire de prise en charge
La sélection suit le tuple, pas un verdict de prise en charge
Dans src/canvas/index.ts:369-394, CreepJS maintient l’ensemble pattern. Un emoji rejoint emojiSet uniquement si son tuple de dimensions n’y figure pas encore. Une entrée ultérieure produisant un tuple déjà vu n’ajoute aucun représentant. Son absence dans emojiSet reste compatible avec une mesure réussie ; cette branche n’exige pas de conclure à un glyphe non pris en charge.
Un regroupement hypothétique précise la conséquence. Supposons que deux chaînes distinctes produisent la même géométrie sélectionnée et qu’une autre produise un tuple différent. Les représentants gardent un membre du premier groupe et un du second. Cela ne démontre ni l’indisponibilité du membre écarté ni l’existence de deux fichiers de police identifiés par les membres retenus. La règle porte uniquement sur l’égalité des propriétés choisies.
L’ordre a aussi un rôle limité mais important. Comme emojiSet reçoit le premier membre rencontré de chaque nouveau motif, changer l’ordre des entrées peut modifier le représentant choisi sans modifier la collection des tuples uniques. Une différence entre listes de représentants ne suffit donc pas à prouver un changement d’environnement. Il faut d’abord établir que révision et séquence d’entrée sont comparables.
Matrice du code à l’affirmation
La matrice suivante aide à interpréter le code ; ce n’est pas une sortie du navigateur. Chaque ligne borne la conclusion de son étape. Un classificateur ultérieur ne peut pas être attribué à une étape antérieure simplement parce qu’il en consomme les données.
| Étape | Opération du code | Objet produit | Interprétation étayée | Raccourci non étayé |
|---|---|---|---|---|
| Mesure | Lire sept propriétés TextMetrics | Tuple géométrique | Géométrie textuelle sélectionnée | Identité du système |
| Déduplication | Ajouter les tuples inédits à pattern | Motifs distincts | Mesures sélectionnées différentes | Fichiers de police différents |
| Choix des représentants | Garder le premier membre de chaque motif | emojiSet | Représentants de groupes métriques | Prise en charge complète des emojis |
| Agrégation | Résumer les tuples uniques | textMetricsSystemSum | Résumé métrique avec perte | Identité réversible du dispositif |
| Assemblage | Vérifier séparément liedTextMetrics | Champs métriques inclus | Décision d’inclusion propre au code | Verdict d’un service externe |
Cette règle résout une confusion de rapport : ne comptez pas les membres de emojiSet comme des polices installées, ni les absents comme des glyphes en échec. Pour un message illisible, le nombre de groupes métriques ne dit pas si la séquence prévue s’affiche correctement. Examinez le défaut visible dans une application autorisée au lieu de traiter un champ d’empreinte comme un test de prise en charge des glyphes.
Une somme abandonne la structure résumée
Des groupes uniques, pas des poids de fréquence
L’agrégation de src/canvas/index.ts:396-399 parcourt pattern, l’ensemble des représentations de tuples uniques. Les entrées répétées produisant un tuple existant n’apportent pas de copie supplémentaire à cette étape. Le total ne mesure donc pas la fréquence d’une géométrie dans la collection d’entrée. Supposer une contribution égale de chaque entrée originale décrit un autre algorithme.
Conversion et réduction compriment également plusieurs distinctions. L’implémentation publiée convertit les composantes en nombres et utilise zéro si cette conversion produit une valeur fausse dans un contexte booléen, avant l’addition. Un résultat présent dans le résumé ne démontre pas que chaque propriété choisie existait avec une valeur finie non nulle. Disponibilité des propriétés brutes et résumé numérique sont des faits distincts ; le second ne reconstruit pas la première.
L’addition perd l’agencement des composantes. Des tuples différents peuvent avoir le même total et des collections différentes le même agrégat. C’est un raisonnement sur la perte d’information, pas un taux de collision observé ni une population de navigateurs mesurée. L’existence de la somme ne fournit ni pourcentage d’unicité, ni confiance d’identification, ni précision de reconnaissance du système.
Les pixels suivent une autre voie
Le module canvas produit aussi des données rendues, mais textMetricsSystemSum n’est pas une empreinte de tous les pixels d’une image emoji. Comparaisons métrique et pixel doivent garder des noms distincts. Un rapport qui les appelle toutes deux « canvas identique » ne distingue pas l’égalité de disposition de l’égalité raster, même si le collecteur initial conservait cette différence.
L’analyse de la graine canvas CreepJS traite des demandes de dessin déterministes et de leur rapport au rendu. Elle ne remplace pas la question du regroupement métrique : une séquence de dessin connue ne détermine pas quels tuples textuels fusionnent. Réciproquement, une géométrie représentative égale n’établit pas l’identité des demandes de dessin, des images ou de la chaîne d’agrégation ultérieure.
Dans une comparaison de compatibilité autorisée, conservez la question réelle. Pour un retour à la ligne inattendu, width et le contexte de disposition importent. Pour un emoji illisible, le glyphe visible importe. Un agrégat peut signaler une différence de rapport sans expliquer aucun de ces défauts. Remplacer l’incident par un score d’empreinte éliminerait les éléments nécessaires à la correction de l’application.
Pixels et métriques ont des conditions distinctes
L’inclusion n’est pas un interrupteur global du canvas
L’assemblage du résultat à la révision fixée retourne sans résultat si le résultat de module canvas2d entrant est absent. Lorsqu’il existe, deux conditions sont traitées indépendamment. La branche !lied inclut dataURI, paintURI, textURI et emojiURI. La branche !liedTextMetrics inclut textMetricsSystemSum et emojiSet.
La négation JavaScript est importante : !lied et !liedTextMetrics admettent toute valeur fausse en contexte booléen, pas seulement le booléen littéral false. Le code décrit des conditions d’inclusion ; il ne permet pas de transformer un indicateur absent en validation exécutée. Les noms lied et liedTextMetrics sont des identifiants de bibliothèque, pas des conclusions sur l’honnêteté ou l’intention d’une personne.
La seconde branche conserve les données produites par la première ou crée un nouvel objet si elles sont absentes. Des champs métriques peuvent donc être inclus alors que la branche pixel n’a pas rempli ses champs. Un exportateur qui fusionne les deux cas sous une étiquette « canvas rejeté » efface une distinction présente dans le code cité.
Les champs omis exigent le contexte du rapport
| Élément disponible | Interprétation bornée | Élément encore manquant |
|---|---|---|
Aucun résultat canvas2d entrant | Ce bloc retourne sans ce résultat de module | La cause de l’absence du module |
| Branche pixel écartée, branche métrique incluse | Ces groupes sont traités indépendamment | Toute classification de système ou comparaison de pixels |
| Le module existe, mais la condition métrique n’admet pas les champs | L’inclusion métrique est retenue à cette étape | Une éventuelle transformation d’export ultérieure |
Un rapport téléchargé n’a pas emojiSet | Le champ n’est pas visible dans le rapport inspecté | Module, branche d’inclusion et historique d’export |
Ces lignes sont des cas tirés du code, pas des exécutions reproduites. En particulier, l’absence de emojiSet dans un téléchargement ne sélectionne pas la troisième ligne sans résultat de module et état de branche. Filtrage d’export, évolution du schéma et résultat de module indisponible restent distincts. Situez l’observation dans la couche réellement inspectée au lieu de déduire un événement antérieur d’un champ final vide.
Comparer des rapports exige leur provenance
La révision appartient à la comparaison
Conservez la révision CreepJS fixe près du nom de champ. 10aa6724cd33a1015db1574211890518cd04f0cc identifie le code lu ici ; une URL de branche mobile ne prouve pas qu’un autre rapport utilisait les mêmes propriétés ou le même assembleur. Une date ne prouve pas non plus quels octets une page servait. Cette limite reste valable quand deux exports affichent des étiquettes identiques.
L’étape d’observation doit accompagner la révision. Un objet du module canvas, l’objet d’empreinte assemblé et un rapport téléchargé n’exposent pas forcément les mêmes champs. Avant d’interpréter un textMetricsSystemSum absent, identifiez l’objet contenu dans la pièce jointe et une éventuelle transformation ayant supprimé ou renommé des champs. Sans provenance conservée, laissez la cause indéterminée plutôt que d’inventer un historique d’exécution.
Pour une comparaison permise de rapports existants, le tableau propose une note minimale de provenance. Ce sont des champs d’assistance recommandés, pas un format d’export CreepJS ni des journaux produits automatiquement par BotBrowser. Ne conservez que ce qu’exige le besoin d’assistance ; un lien vers une pièce jointe contrôlée par l’utilisateur peut être préférable à des vecteurs métriques bruts copiés dans l’analytique ordinaire.
| Champ d’assistance | Question résolue | Limite de collecte |
|---|---|---|
| Révision du code | Quelle implémentation est interprétée ? | Fixer la révision réelle, pas une branche courante présumée |
| Étape de l’objet | Module, objet assemblé ou export ? | Ne pas inférer un état antérieur non observé |
| Composition métrique | Les mêmes sept propriétés étaient-elles choisies ? | Noter le schéma avant les valeurs brutes |
| Sens des représentants | Premier membre de chaque tuple unique ? | Ne pas les renommer en prise en charge typographique |
| Symptôme visible | Retour à la ligne, glyphe absent ou seul rapport modifié ? | Séparer le problème applicatif des affirmations d’identité |
Une étiquette de système exige ses propres preuves
Aucun des blocs cités ne contient l’étape de classification manquante. Un rapport ajoutant une étiquette de système exige une règle identifiée séparément, ses entrées et des éléments de validation. Voir textMetricsSystemSum près d’une étiquette ne prouve pas que la somme l’a déterminée à elle seule. Une étiquette d’un composant ultérieur n’est pas une conclusion documentée par measureText().
Les affirmations sur une population demandent encore une autre catégorie de preuves. L’inspection du code ne mesure ni la fréquence d’une valeur chez les utilisateurs réels ni l’effet d’une version de navigateur sur cette distribution. Aucune étude de population n’a été effectuée ici. Le mot informel « system » d’une variable ne signifie pas précision d’identification mesurée, stabilité entre dispositifs ou impossibilité que des installations différentes partagent une valeur.
Les contrôles typographiques BotBrowser ont une portée limitée
La documentation typographique BotBrowser décrit les inventaires de polices liés aux profils, le rendu interplateforme et le repli emoji adapté à la plateforme. Ce sont des capacités du produit, pas des affirmations du dépôt CreepJS, de MDN ou d’Unicode. La même page admet explicitement des différences de certaines mesures de disposition ; un réglage de profil ne garantit pas un résultat identique pour chaque glyphe ou propriété métrique.
Une application autorisée peut utiliser un profil déclaré pour vérifier une exigence précise de disposition ou de rendu. L’acceptation doit nommer cette exigence : lisibilité du message prévu ou retour à la ligne conforme au dessin attendu. Elle ne doit pas remplacer la correction applicative par « CreepJS a inféré le système prévu », ni conclure au chargement réussi d’un profil à partir du seul emojiSet correspondant.
La documentation et l’interprétation du code répondent à des questions différentes. La page décrit les capacités de configuration et leurs limites. La matrice explique comment une implémentation publique réduit les métriques et admet les champs. Séparer ces périmètres évite de promettre le résultat d’un classificateur externe à partir d’un contrôle produit, ou de présenter un champ externe comme une sortie BotBrowser documentée.
Questions fréquentes
Un emojiSet plus court signifie-t-il moins d’emojis pris en charge ?
Non. La sélection suit les nouveaux tuples métriques. Plusieurs entrées mesurables peuvent partager un tuple et ne laisser que le premier représentant dans emojiSet. Un inventaire de prise en charge exigerait un autre test et des preuves sur les glyphes prévus ; le nombre de représentants ne fournit pas ce résultat.
Des sommes égales prouvent-elles le même système ?
Non. textMetricsSystemSum comprime les tuples uniques et abandonne leur agencement. Les deux blocs cités n’attribuent pas de système et aucune validation sur une population de navigateurs n’est revendiquée. Un classificateur ultérieur exige ses propres preuves ; l’égalité de cet agrégat n’authentifie ni système, ni appareil physique, ni personne.
Pourquoi des métriques peuvent-elles rester sans les champs pixel ?
L’assembleur vérifie séparément lied et liedTextMetrics. La branche métrique peut créer un objet même si la branche pixel n’en a fourni aucun. Ce chemin explique une combinaison possible de champs ; il n’établit pas le chemin suivi par un rapport particulier sans contexte de module et d’export.
Sources
- CreepJS : module canvas fixé
- CreepJS : assemblage du résultat fixé
- MDN : CanvasRenderingContext2D.measureText()
- MDN : TextMetrics
- CSS Fonts : algorithme de correspondance des polices
- Unicode : spécification emoji
- BotBrowser : documentation typographique
Conclusion pratique
Interprétez emojiSet comme des représentants de géométries uniques et textMetricsSystemSum comme un résumé avec perte, puis identifiez l’étape d’inclusion avant d’expliquer un champ absent. Conservez révision et provenance pour les comparaisons autorisées. Utilisez des preuves applicatives directes pour les défauts de rendu et des preuves distinctes pour toute étiquette de système ; ces blocs ne fournissent ni inventaire de prise en charge ni identité de dispositif.
Cet article fait partie du guide : Qu'est-ce qu'une empreinte de navigateur ?
Articles Connexes
Fingerprinting par mesure de texte : suivi sous-pixel
EmpreinteRapport WebGL de CreepJS : contextes et signaux
EmpreintePrédiction CreepJS : agrégation et états inconnus
EmpreinteQu'est-ce que l'empreinte des polices ? Cohérence du texte
EmpreinteEmpreinte getClientRects : cohérence DOMRect
EmpreinteRapport Intl CreepJS : champs et valeurs absentes
Faites passer BotBrowser de la recherche à la production
Utilisez ces guides pour comprendre le modèle, puis passez à la validation multi-plateforme, aux contextes isolés et au déploiement navigateur prêt pour l'échelle.