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:
- Konwertuj swoje dane na pliki binarne
- Przekształć obraz docelowy w surową mapę bitową
- Przejdź wzdłuż pikseli obrazu w przewidywalny sposób (po prostu robią to od lewej do prawej od lewego górnego rogu).
- Napisz jeden bit do bitu najniższego rzędu każdego kanału koloru każdego piksela
- Wyeksportuj zmodyfikowaną bitmapę do png ponownie
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:
Zwróć uwagę na ostatnim zdjęciu, jak w szumie jest ledwo dostrzegalna pozioma linia. To koniec danych poziomu. Oznacza to, że mogę dopasować wszystkie dane poziomu do obrazu 265 x 120 pikseli, używając tylko najmniej znaczącego bitu.
TRICKY DODATEK:
Coś, co mógłbym zrobić i uważam, że ludzie Spore również to zrobili, to w rzeczywistości użycie WSZYSTKICH bitów koloru w pikselach, które są w 100% przezroczyste. Ponieważ te piksele są przezroczyste, nie ma znaczenia, jaki kolor je ustawisz.
Nie mogę tego jednak zrobić, ponieważ używam całego obrazu, co oznacza, że nie mam przezroczystych pikseli do pracy.
Po co faworyzować tę technikę niż tylko przechowywanie jej w metadanych?
- Fajniej! :)
- Usługi mogą zniekształcać metadane (być może jako funkcja prywatności / bezpieczeństwa), ale nie powinny zniekształcać pikseli twojego PNG, chyba że mają agresywne wymagania dotyczące hostingu obrazów (patrząc na ciebie, facebook). Ale jeśli są one całkowicie re-eksportu obraz nie ma nic Cię niezawodnie można zrobić.
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.