Co właściwie znajduje się w zdjęciu

Otwórz dowolne zdjęcie prosto z telefonu, a obraz to tylko część pliku. Wokół niego owinięty jest blok metadanych, który aparat zapisał w tym samym momencie: marka i model urządzenia, obiektyw, ustawienia ekspozycji, dokładna sekunda otwarcia migawki, wersja systemu operacyjnego i — gdy usługi lokalizacyjne są włączone — szerokość i długość geograficzna miejsca, w którym stałeś, zazwyczaj dokładne do kilku metrów.

Nic z tego nie jest widoczne na obrazie. Wszystko to podróżuje z plikiem. Wyślij zdjęcie jako załącznik do wiadomości e-mail, wrzuć do udostępnionego folderu, wystaw z nim przedmiot na sprzedaż, a każde z tych pól pójdzie z nim.

Narzędzie powyżej odczytuje ten blok i pokazuje go Tobie, zanim cokolwiek usunie, ponieważ liczby są argumentem. „To zdjęcie zawiera metadane EXIF” to pojęcie abstrakcyjne. Para współrzędnych, która prowadzi do Twoich drzwi wejściowych, nie.

Usuwaj bajty, nie przekodowuj

Istnieją dwa sposoby na usunięcie metadanych z obrazu, i tylko jeden z nich jest właściwy.

Prostym sposobem jest narysowanie obrazka na płótnie HTML i ponowne jego zapisanie. Metadane znikają, ponieważ płótno nigdy ich nie posiadało. Powoduje to również ponowną kompresję zdjęcia — drugą rundę stratnej kompresji JPEG nakładającej się na kompresję aparatu — i usuwa osadzony profil kolorów, więc „wyczyszczony” plik jest mierzalnie gorszy od oryginału, a jego kolory się zmieniły. Większość darmowych usuwaczy metadanych działa w ten sposób, i to jest powodem, dla którego plik, który dostajesz z powrotem, ma często inny rozmiar i nieco inny obraz.

To narzędzie robi tę drugą rzecz. Plik JPEG to ciąg segmentów znaczników; PNG to ciąg fragmentów (chunks); WebP to kontener RIFF. Metadane żyją w konkretnych, łatwych do zidentyfikowania segmentach w każdym z nich — blokach APPn w plikach JPEG, we fragmentach eXIf, tEXt, iTXt, zTXt i tIME w PNG, i fragmentach EXIF i XMP w WebP. Ich usunięcie polega na przejściu przez strukturę samego pliku, pominięciu tych bloków i skopiowaniu wszystkiego innego bez zmian.

Skompresowany obraz nigdy nie jest dekodowany. Oznacza to, że dane obrazu w pobieranym pliku są bit w bit danymi obrazu w dostarczonym pliku — nie są „wizualnie identyczne”, nie mają „wysokiej jakości”, są identyczne. Jedyną różnicą między dwoma plikami są metadane, które zostały usunięte.

Czego nie usuwamy, i dlaczego

Dwie rzeczy są celowo zachowywane, i obie są pokazywane Tobie za pomocą pola wyboru na wypadek, gdybyś się nie zgadzał.

Profil kolorów. Profil ICC opisuje, w jakiej przestrzeni barw zakodowane są piksele. Nowoczesne telefony rejestrują obraz w szerokiej gamie, a zdjęcie o szerokiej gamie bez przypisanego profilu jest interpretowane jako zwykłe sRGB i renderuje się błędnie — zazwyczaj jest wyblakłe, czasami jaskrawe. Profil opisuje obraz, nie fotografa, więc domyślnie zostaje.

Flaga obrotu, jeśli zdjęcie jej potrzebuje. Telefony nie obracają pikseli, gdy obracasz aparat; przechowują zdjęcie tak, jak zarejestrował je czujnik, i zapisują pojedynczą liczbę EXIF, informującą, którą stroną do góry to powinno się znajdować. Usuń tę liczbę, a czysta kopia wyjdzie w niektórych aplikacjach z boku. Gdy zdjęcie polega na tym, to narzędzie odtwarza minimalny blok z tą jedną wartością i niczym więcej — bez aparatu, bez znacznika czasu, bez lokalizacji.

Co zostaje z Twoimi innymi zdjęciami

Czyszczenie pliku przed jego wysłaniem rozwiązuje problem udostępniania. Nie robi jednak nic w kwestii zdjęć wciąż leżących w rolce aparatu, które zachowują każde pole właśnie usunięte przez to narzędzie, a które to mogą zostać odczytane przez cokolwiek, co ma dostęp do urządzenia.

Właśnie do tej połowy problemu służy Vaultine: zaszyfrowany sejf, w którym pliki są zabezpieczane algorytmem AES-256-GCM na samym urządzeniu, otwierane we wbudowanej przeglądarce zamiast ich odszyfrowywania na dysk, i odblokowywane wzorem lub numerem PIN zamiast zakładania konta. To inna robota niż ta strona — Vaultine przechowuje pliki, nie edytuje ich metadanych — ale to obie połówki tego samego instynktu. Zdjęcia, które udostępniasz, zdradzają, gdzie byłeś. Zdjęcia, które zatrzymujesz, powinny być pod kluczem.