Różne II – Glitch-ujemy zdjęcia

Źródło: http://www.glitchet.com/

Skoro już przy okazji pisania modemu jestem w temacie szumów i błędów komunikacji, naturalne jest poruszenie tematu “zepsutych” zdjęć lub filmów.

Swoją drogą, wracając do tematu modemu – Googlowałem trochę informacji i natknąłem się na wtyczkę do Chrome która dźwiękowo rozsyła link do otwartej strony do wszystkich komputerów wokół, które również mają tę wtyczkę.

https://research.googleblog.com/2015/05/tone-experimental-chrome-extension-for.html

Wstęp

Format zdjęcia definiuje jego strukturę (to dlaczego jest wiele formatów zdjęć i czym się różnią możesz przeczytać tutaj), przeglądarka zdjęć musi wiedzieć z jakim formatem ma do czynienia aby wiedzieć jak je wyświetlić; znając już format, wie gdzie szukać poszczególnych sekcji – skanu zdjęcia albo tekstowego komentarza.

tabelaPrzykład – Tabela znaczników dla formatu JPG – Źródło: https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure

Zdjęcia zglitchowane mają celowo, bądź nie, zmienione wartości bajtów z sekcji odpowiadających za obraz (zmiana innych raczej spowoduje, że zdjęcie stanie się niezdatne do odczytu przez galerię, np. zmienimy zadeklarowany rozmiar i nie będzie pasował on do ilości pikseli opisanych w sekcji ze skanem obrazu, przeglądarka zdjęć nie otworzy takiego pliku), co czasem znacznie zmienia sposób w jaki przeglądarka zdjęć rysuje je na ekranie. Wybór bajta któremu zmienia się wartość jak i sama wartość nie muszą być losowe – chociażby poniższy przykład:

Źródło: http://datamoshing.com/category/image/

Program sortował piksele będące w tym samym rzędzie względem ich jasności.

In mode 2, or white mode, the script will begin sorting when it finds a pixel which is not white in the column or row, and will stop sorting when it finds a white pixel.

Piszemy własny glitcher

Korzystając z wklejonej wyżej tabeli odczytałem jakie bajty sygnalizują start i koniec sekcji ze skanem zdjęcia – dla startu jest to “FF DA” a dla końca “FF D9”. Program wczytuje zdjęcie w postaci tablicy bajtów, przeszykuje ją pod względem pierwszego wystąpienia bajtów startu i ostatniego wystąpienia bajtów końca.

Następnie wybiera losowy bajt z pomiędzy nich i losuje dla niego wartość z pomiędzy -128 do 127 – maksymalny decymalny zasięg zmiennej byte. Jeśli podmieniamy tylko jeden bajt, to na tym się kończy – otrzymaną tablicę znów zapisujemy do pliku.

picTo praktycznie cały kod, pominąłem obsługę argumentów z konsoli i wczytanie pliku. Zostawiłem również możliwość włączenia w trybie podmieniającym bajty w dowolnym miejscu tablicy, dla różnorodności (co jasne, wygeneruje to więcej błędnych plików).

Kod razem z gotowym jarem wrzucam na GitHuba:

https://github.com/dbeef/pic-glitcher

Testujemy glitcher

Dla przykładu posłużymy się klasykiem – zdjęciem kaczki. Przed przejściem przez mój pic-glitcher:

zbrodniarz

Po przejściu:

kopia63

Wrzucając to zdjęcie na bloga zauważyłem też jeszcze jedną prawidłowość – z zepsutym jpgiem galerie zdjęć radzą sobie na różne sposoby. Tutaj kaczka wyświetla się zielona (a na niektórych telefonach wyświetla się prawie prawidłowo, pomijając kilka przekłamanych grupek pikseli), ale ta sama kaczka w systemowej przeglądarce wyświetla mi się tak (zrzut ekranu zrobiony zglitchowanemu zdjęciu, tutaj przekłamania już muszą być oddane tak samo na wordpressie):

zepsutyzbrodniarz

Tu również psychodelicznie (oryginał glitcha, również może wyświetlać się różnie w zależności od twojej przeglądarki zdjęć):

zbrodniarz2

copy-436

copy-464

copy-497

Ogółem na 500 generowanych w ciągu paru sekund zdjęć, jakieś 100 było nie do ponownego otwarcia w galerii, prawdopodobnie nadpisuję bajty odpowiedzialne za coś odpowiedzialnego za chociażby kompresję a nie właściwy skan zdjęcia.

Myślę, że temat zdjęć podejmę jeszcze przynajmniej raz, następnym razem już z innej strony.

Odnośniki

https://github.com/dbeef/pic-glitcher – GitHub z pic-glitcherem

http://www.glitchet.com/resources – Sporo odnośników do artykułów w temacie

http://jameshconnolly.com/glitchtalk.html – Glitchowanie jako sztuka

http://users.wfu.edu/matthews/misc/graphics/formats/formats.html – O formatach zdjęć

dsp2017-1

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s