El formato PNG es compatible con metadatos más o menos arbitrarios. El estándar PNG define un archivo PNG, esencialmente una serie de fragmentos, algunos de los cuales son necesarios (y contienen los datos de la imagen). Otros, sin embargo, son opcionales. Por ejemplo, hay un fragmento para almacenar información gamma o datos de histograma.
En particular, hay un tEXt
fragmento que se puede utilizar para almacenar pares de texto de clave / valor arbitrarios. Esto se puede usar para enviar cualquier tipo de datos arbitrarios que desee, siempre que pueda representar esos datos como texto (lo cual es bastante probable).
Necesitará una biblioteca PNG que le permita acceder y manipular estos fragmentos adicionales (como la biblioteca de referencia ), o deberá escribir uno usted mismo. Entonces es solo cuestión de elegir cómo codificar los datos que desea como pares clave / valor. Sugeriría lo siguiente:
- elija nombres clave que tengan como prefijo el nombre de su proyecto o el nombre de código como una forma de crear un sistema de "espacio de nombres" crudo y evite posibles conflictos con los usos de los datos por parte de otras aplicaciones
- no intente almacenar texturas reales de esta manera, almacene referencias a esas texturas que apuntan dentro de la base de datos de activos de su propio juego
- datos como el tamaño de la criatura u objeto, el peso, etc., escalares simples, básicamente, pueden almacenarse trivialmente
En aras de dar una respuesta más completa, también señalaré que hay otro enfoque (previamente documentado por las respuestas de @Vaughn y @ Alexis): codifique los datos adicionales que desee directamente en los píxeles de su imagen, distribuyendo sus datos a través de los bits de bajo orden de los canales de color. Este enfoque no requiere el uso de metadatos adicionales, lo que significa que puede implementarlo por completo sin depender de él o preocuparse por los programas externos que manejan incorrectamente esos metadatos. También tiene un factor "genial" muy alto, y debido a que solo usa bits de bajo orden, la imagen seguirá siendo correcta para el ojo humano. Sin embargo, significa que el tamaño de su imagen es un factor de control primario para la cantidad de datos que puede almacenar; Si necesita más almacenamiento, deberá asignar más píxeles a la imagen.
Como otros han señalado, este proceso se conoce como esteganografía .