Розробник Монако насправді зробив чудову статтю про те, як вони і Спора досягли цього.
Основний підсумок того, що вони роблять, досить простий:
- Перетворіть ваші дані у двійкові
- Перетворіть цільове зображення в необроблене растрове зображення
- Пройдіться по пікселях зображення за якоюсь передбачуваною схемою (вони просто роблять зліва направо від верхнього лівого кута).
- Запишіть один біт у біт нижчого порядку кожного кольорового каналу кожного пікселя
- Експортуйте змінену растрову карту в png знову
Просто зробіть це в зворотному порядку, щоб отримати свої дані.
Основна ідея цього процесу полягає в тому, що в зображенні багато пікселів, і біти нижчого порядку кожного кольорового каналу не мають великої різниці. Крім того, приблизно половина бітів, які ви пишете, буде просто тим, що вже було в зображенні. Те, що ви отримуєте назад, - це по суті правильне зображення, але з дивними артефактами. Він потребує часу, щоб зауважити, що ці артефакти дійсно помітні лише в тому випадку, якщо ви дійсно спрацьовуєте контрастність / насиченість і масштабування. Хоча у нього є вихідні зображення з великою кількістю початкового шуму.
Зі статті:
На останньому зображенні зауважте, як у шумі ледь помітна горизонтальна лінія. Ось і закінчуються дані рівня. Це означає, що я фактично можу вмістити всі дані рівня в зображення 265x120 пікселів, лише використовуючи найменш значущий біт.
ДОДАТКУВАННЯ ТРИКІВ:
Щось я міг би зробити, і я вважаю, що люди Спори так само, як насправді, використовують ВСЕ кольорові біти в пікселях, які на 100% прозорі. Оскільки ці пікселі прозорі, не має значення, для якого кольору ви їх встановите.
Я не можу цього зробити, оскільки використовую все зображення, це означає, що у мене немає прозорих пікселів, з якими можна працювати.
Навіщо надавати перевагу цій техніці, а не просто зберігати її у метаданих?
- Це веселіше! :)
- Служби можуть обробляти метадані (можливо, як конфіденційність / безпека), але не повинні керувати пікселями вашого png, якщо вони не мають агресивних вимог щодо розміщення зображень (дивлячись на вас, facebook). Але якщо вони повністю реекспортують ваше зображення, ви нічого надійно не зможете зробити.
Додатковий кредит: щоб зменшити помітність шуму, ви можете використовувати PRNG з фіксованим насінням, щоб вибрати пікселі для зміни. Ви також можете змінити лише деякі кольорові канали подібним чином.