Le format PNG prend en charge les métadonnées plus ou moins arbitraires. La norme PNG définit un fichier PNG, essentiellement une série de morceaux, dont certains sont nécessaires (et contiennent les données d'image). D'autres, cependant, sont facultatifs. Par exemple, un morceau permet de stocker des informations gamma ou des données d'histogramme.
En particulier, il existe un tEXt
bloc qui peut être utilisé pour stocker des paires de texte clé / valeur arbitraires. Cela peut être utilisé pour envoyer n'importe quel type de données arbitraires, à condition que vous puissiez les représenter sous forme de texte (ce qui est assez probable).
Vous aurez besoin d'une bibliothèque PNG qui vous permettra d'accéder à ces fragments supplémentaires (tels que la bibliothèque de référence ) et de les manipuler , ou vous devrez en écrire un vous-même. Ensuite, il suffit de choisir comment coder les données souhaitées sous forme de paires clé / valeur. Je suggère ce qui suit:
- choisissez des noms de clés précédés du nom de votre projet ou du nom de code de votre projet afin de créer un système "d'espace de noms" brut et évitez les conflits potentiels avec l'utilisation des données par une autre application
- n'essayez pas de stocker les textures réelles de cette façon, stockez des références à ces textures qui pointent dans la base de données d'actifs de votre jeu
- des données telles que la taille de la créature ou de l'objet, son poids, etc. - des scalaires simples, en gros - peuvent être stockées de manière triviale
Dans l’intérêt d’une réponse plus complète, je soulignerai également qu’il existe une autre approche (déjà documentée par les réponses @Vaughn et @ Alexis): coder les données supplémentaires souhaitées directement dans vos pixels d’image, en répartissant vos données sur les bits de poids faible des canaux de couleur. Cette approche ne nécessite pas l’utilisation de métadonnées supplémentaires, ce qui signifie que vous pouvez l’implémenter entièrement sans vous en fier ou sans vous soucier des programmes externes qui gèrent ces métadonnées de manière incorrecte. Son facteur de "fraîcheur" est également très élevé et, du fait que vous n'utilisez que des bits de poids faible, l'image sera toujours correcte à l'œil humain. Toutefois, cela signifie que la taille de votre image est un facteur de contrôle principal pour la quantité de données que vous pouvez stocker. si vous avez besoin de plus de stockage, vous devrez allouer plus de pixels à l’image.
Comme d'autres l'ont souligné, ce processus s'appelle la stéganographie .