Spore umożliwia udostępnianie stworzonych przez gracza stworzeń poprzez eksport .png
pliku. To .png
jest zdjęcie stworzenia, ale jeśli zostanie zaimportowane do gry, informacje o stworzeniu (takie jak tekstury, rozmiar i kształt) również będą z nim związane.
Jak mogę wdrożyć taką funkcję?
file-format
savegame
png
ibrabeicker
źródło
źródło
Odpowiedzi:
Jeśli wszystko, czego naprawdę potrzebujesz, to plik PNG, są szanse, że po prostu dodają informacje do pliku. To właściwie praktyka steganografii . Często służy to do ukrywania ładunków lub tajnych wiadomości w rzeczach, które wydają się publicznie dostępne. Jest jednak prawdopodobne, że w tym przypadku zastosowano tę metodę. Typowa Stegongraphy zejdzie z drogi, aby ukryć zawartość, ale nie ma powodu, dla którego nie można po prostu dodać danych z obrazu na końcu pliku i pobrać.
Kilka narzędzi koduje te dane dla Ciebie, wyszukiwarka Google przywołuje przynajmniej to i to .
PNG ma sygnaturę bajtu
$89
na początku, więc możliwe jest, że informacja została wstawiona za samą strukturą PNG i po prostu przeanalizowana przez grę SPORE.Jednak dalsze badania podane przez inne odpowiedzi i wyszukiwanie w Google ujawniają, że Spore faktycznie używał tylko wersji Stegongraphy, aby ukryć informacje w bitach alfa. Mając to na uwadze, możemy wykluczyć możliwość dołączenia danych lub metadanych.
Należy zauważyć, że metadane są nadal bardzo realnym wyborem, jeśli dane są analizowane lokalnie. Jeśli te informacje mogą być udostępniane w Internecie lub ponownie kodowane, eksport nie gwarantuje zachowania wszystkich informacji. Gdy używane są dane w pikselach, mogą one bez problemu przetrwać konwersje bez strat.
źródło
PNG posiada wsparcie dla bardziej lub mniej arbitralnie metadanych. Standard PNG definiuje plik PNG, zasadniczo szereg fragmentów, z których niektóre są wymagane (i zawierają dane obrazu). Inne są jednak opcjonalne. Na przykład istnieje fragment do przechowywania informacji gamma lub danych histogramu.
W szczególności istnieje
tEXt
fragment, którego można użyć do przechowywania dowolnych par tekst / klucz. Można tego użyć do przesyłania dowolnych dowolnych danych, pod warunkiem, że możesz reprezentować te dane jako tekst (co jest całkiem prawdopodobne).Będziesz potrzebował biblioteki PNG, która umożliwia dostęp i manipulowanie tymi dodatkowymi fragmentami (np. Biblioteką referencyjną ), lub będziesz musiał napisać jedną samodzielnie. Następnie wystarczy wybrać sposób kodowania danych jako pary klucz / wartość. Sugerowałbym następujące:
W celu uzyskania pełniejszej odpowiedzi zwrócę również uwagę na inne podejście (wcześniej udokumentowane odpowiedziami @Vaughn i @ Alexis): zakoduj dodatkowe dane, które chcesz bezpośrednio w pikselach obrazu, rozdzielając je między bity kanałów kolorów niskiego rzędu. Takie podejście nie wymaga użycia dodatkowych metadanych, co oznacza, że można je całkowicie zaimplementować bez polegania na nich lub martwienia się, że programy zewnętrzne nieprawidłowo obsługują te metadane. Ma również bardzo wysoki współczynnik „cool”, a ponieważ używasz tylko bitów niskiego rzędu, obraz nadal będzie wyglądał poprawnie dla ludzkiego oka. Oznacza to jednak, że rozmiar obrazu jest głównym czynnikiem kontrolującym ilość danych, które można przechowywać; jeśli potrzebujesz więcej miejsca, musisz przydzielić więcej pikseli do obrazu.
Jak zauważyli inni, proces ten znany jest jako steganografia .
źródło
Twórca Monako napisał świetny artykuł o tym, jak zarówno oni, jak i Spore to osiągnęli.
Podstawowe podsumowanie tego, co robią, jest dość proste:
Po prostu zrób to w odwrotnej kolejności, aby odzyskać swoje dane.
Podstawową ideą tego procesu jest to, że na obrazie jest dużo pikseli, a bity najniższego rzędu w każdym kanale kolorów nie mają większego znaczenia. Ponadto około połowa zapisanych bitów będzie tym, co bit na obrazie już był. To, co dostajesz, to właściwie właściwy obraz, ale z dziwnymi artefaktami. Poświęca trochę czasu, aby zauważyć, że te artefakty są naprawdę zauważalne tylko wtedy, gdy naprawdę zwiększysz kontrast / nasycenie i powiększysz. Ma jednak obrazy źródłowe z dużą ilością początkowego szumu.
Z artykułu:
Po co faworyzować tę technikę niż tylko przechowywanie jej w metadanych?
Dodatkowy kredyt: aby zmniejszyć zauważalność szumu, możesz użyć PRNG ze stałym ziarnem, aby wybrać piksele do modyfikacji. Można również zmodyfikować tylko niektóre kanały kolorów w podobny sposób.
źródło
Pobrałem i zbadałem kilka stworzeń Spore ze Sporepedii. Od tych dowiedziałem się, że:
Warto zauważyć, że to właśnie robi Spore, jest to metoda, która stawia prostotę przed większością innych obaw.
Wybór zastosowania stenografii zamiast dodatkowego bloku danych oznacza, że dane przetrwają, jeśli obraz zostanie ponownie zakodowany, na przykład przez stronę internetową, chociaż nie przetrwa skalowania ani kompresji Jpeg.
Myślę, że najbardziej widoczną alternatywą jest zakodowanie tylko identyfikatora na obrazie i pozostawienie rzeczywistych danych na centralnym serwerze, gdzie ten identyfikator może zostać wymieniony na dokładne dane o stworzeniu. Taki identyfikator byłby wystarczająco krótki, aby można go było zakodować w formacie stenograficznym tolerującym skalowanie i kompresję.
Możliwe proste ulepszenia formatu Spore obejmują:
źródło