Retour au Centre de connaissances
Empreinte

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

Documentation

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é

  • emojiSet conserve 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.
  • textMetricsSystemSum agrè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 lied pour les pixels et, séparément, liedTextMetrics pour 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

Cinq étapes du code : measureText produit sept métriques, pattern conserve les tuples distincts, emojiSet choisit les représentants, textMetricsSystemSum résume les tuples uniques et liedTextMetrics contrôle leur inclusion. Aucune étape de ces blocs n’attribue un système.

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.

ÉtapeOpération du codeObjet produitInterprétation étayéeRaccourci non étayé
MesureLire sept propriétés TextMetricsTuple géométriqueGéométrie textuelle sélectionnéeIdentité du système
DéduplicationAjouter les tuples inédits à patternMotifs distinctsMesures sélectionnées différentesFichiers de police différents
Choix des représentantsGarder le premier membre de chaque motifemojiSetReprésentants de groupes métriquesPrise en charge complète des emojis
AgrégationRésumer les tuples uniquestextMetricsSystemSumRésumé métrique avec perteIdentité réversible du dispositif
AssemblageVérifier séparément liedTextMetricsChamps métriques inclusDécision d’inclusion propre au codeVerdict 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 disponibleInterprétation bornéeÉlément encore manquant
Aucun résultat canvas2d entrantCe bloc retourne sans ce résultat de moduleLa cause de l’absence du module
Branche pixel écartée, branche métrique incluseCes groupes sont traités indépendammentToute classification de système ou comparaison de pixels
Le module existe, mais la condition métrique n’admet pas les champsL’inclusion métrique est retenue à cette étapeUne éventuelle transformation d’export ultérieure
Un rapport téléchargé n’a pas emojiSetLe 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’assistanceQuestion résolueLimite de collecte
Révision du codeQuelle implémentation est interprétée ?Fixer la révision réelle, pas une branche courante présumée
Étape de l’objetModule, objet assemblé ou export ?Ne pas inférer un état antérieur non observé
Composition métriqueLes mêmes sept propriétés étaient-elles choisies ?Noter le schéma avant les valeurs brutes
Sens des représentantsPremier membre de chaque tuple unique ?Ne pas les renommer en prise en charge typographique
Symptôme visibleRetour à 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

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.

#CreepJS#Emoji Metrics#Font Fingerprinting#Canvas#confidentialité

Cet article fait partie du guide : Qu'est-ce qu'une empreinte de navigateur ?

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.