O formato PNG tem suporte para metadados mais ou menos arbitrários. O padrão PNG define um arquivo PNG, essencialmente uma série de blocos, alguns dos quais são necessários (e contêm os dados da imagem). Outros, no entanto, são opcionais. Por exemplo, há uma parte para armazenar informações de gama ou dados de histograma.
Em particular, há um tEXt
pedaço que pode ser usado para armazenar pares de texto chave / valor arbitrários. Isso pode ser usado para enviar qualquer tipo de dados arbitrários que você desejar, desde que você possa representá-los como texto (o que é bastante provável).
Você precisará de uma biblioteca PNG que permita acessar e manipular esses pedaços adicionais (como a biblioteca de referência ), ou precisará escrever um. Depois, basta escolher como codificar os dados que você deseja como pares de chave / valor. Eu sugiro o seguinte:
- escolha nomes-chave que sejam prefixados com o nome ou código de seu projeto como forma de criar um sistema bruto de "espaço para nome" e evite possíveis conflitos com o uso dos dados por outros aplicativos
- não tente armazenar texturas reais dessa maneira, armazene referências às texturas que apontam para o banco de dados de ativos do seu jogo
- dados como tamanho de criatura ou objeto, peso etc. - escalares simples, basicamente - podem ser armazenados trivialmente
No interesse de fazer uma resposta mais completa, também apontarei que existe outra abordagem (previamente documentada pelas respostas de @Vaughn e @ Alexis): codifique os dados adicionais que você deseja diretamente nos pixels da imagem, distribuindo os dados pelos os bits de ordem inferior dos canais de cores. Essa abordagem não requer o uso de metadados extras, o que significa que você pode implementá-los completamente sem depender deles ou se preocupar com programas externos que lidam incorretamente com esses metadados. Ele também possui um fator "legal" muito alto e, como você usa apenas bits de baixa ordem, a imagem ainda parece correta para o olho humano. No entanto, isso significa que o tamanho da sua imagem é o principal fator de controle da quantidade de dados que você pode armazenar; se precisar de mais armazenamento, aloque mais pixels na imagem.
Como outros já apontaram, esse processo é conhecido como esteganografia .