To jedna z tych sytuacji, gdy w głowie pojawia się nietypowe pytanie i od tej chwili nie da się spokojnie żyć, dopóki nie znajdziemy odpowiedzi. Pytanie brzmiało: jak duża musi być bitmapa, aby zmieścił się na niej czytelny tekst poematu „Pan Tadeusz” Adama Mickiewicza. Też jesteście ciekawi? No to drążymy, zanim dotrze do nas, że to bez sensu!
Dolne oszacowanie rozmiaru jest proste. Plik tekstowy z Wolnych Lektur, zawierający kompletny tekst „Pana Tadeusza”, ma po wycięciu zbędnych nagłówków 487576 znaków. Chcemy poznać wymaganą liczbę bitów, więc pomnożymy liczbę znaków przez sześć (zamiast zwyczajowych ośmiu – o tym za chwilę). Otrzymany wynik to ok. trzech milionów bitów, które przedstawiamy za pomocą czarnych i białych kropek. Teoretycznie wystarczyłby nam obrazek 3000×1000 pikseli. W takiej postaci przekaz nie byłby jednak czytelny dla człowieka. My chcemy przedstawić literki jako literki, więc po pierwsze każda z nich zajmie więcej, niż sześć kropek, po drugie zaś zmarnujemy sporo przestrzeni na puste miejsca w krótszych wierszach.
Jak małe litery możemy otrzymać w warunkach domowych? Już w latach 90 ubiegłego stulecia dziatwa szkolna drukowała ściągi z kąkutera. Czytelne dla młodych, zdrowych oczu były napisy o wysokości siedmiu kropek drukowane na 24-igłowej drukarce Epson LQ-100. Rozdzielczość tej ostatniej wynosiła ok. 180 pikseli na cal, bo – przy naturalnych luzach mechanizmu – druk wysokiej jakości w 360 dpi nie spełniał oczekiwań. Głowica drukująca, prowadzona paskiem zębatym, nie była w stanie utrzymać wystarczającej dokładności między kolejnymi przejazdami.
Jeden wiersz tekstu miał jakieś 1.5 milimetra wysokości – tyle samo, co napis na jednogroszówce. Dzięki temu centymetr bieżący pomocy naukowej mógł zmieścić sześć linijek tekstu.
Nasz plik z treścią Pana Tadeusza ma 10737 wierszy, więc po wydrukowaniu poematu w opisanej technologii mielibyśmy do czynienia z wąską wstęgą długości 15 metrów. Czy da się lepiej? Bez wątpienia, w końcu domowe drukarki laserowe lub atramentowe oferują rozdzielczość 600 lub 1200 punktów na cal, wielokrotnie więcej niż igłówka z poprzedniego wieku. Tu jednak pojawia się problem – dokładność odwzorowania tak małych detali na papierze zależy od klasy drukarki, jakości materiałów eksploatacyjnych, faktury papieru, temperatury, wilgotności i tak dalej. Nie możemy bez eksperymentów stwierdzić, jak małe litery byłyby jeszcze widoczne, albo czy dokładność druku będzie taka sama na całej szerokości wałka.
W dalszych rozważaniach skupimy się zatem na wyświetlaczach ciekłokrystalicznych, które – sterowane cyfrowo – gwarantują pełną kontrolę nad każdym pikselem prezentowanym użytkownikowi.
Jak małe litery będziemy w stanie odczytać? Przy krojach o wysokości 5 pikseli odczuwamy pełen komfort, taka siatka pozwala nawet na odwzorowanie wielkich i małych liter.
Przy siatce 4×4 robi się ciasno – w grę wchodzi tylko jeden rozmiar liter, kreski w znakach takich, jak „M” „W” czy „S” sklejają się ze sobą.
Czy da się zejść niżej? Da się! Siatka 3×3 piksele to już spore wyzwanie dla czytelnika. Oto litery mieszczące się w kwadracie 3×3:
To raptem 9 kropek, więc takie pary jak „5/S” czy „2/Z” będą nieodróżnialne. Mocno umowne stają się też znaki interpunkcyjne. Paradoksalnie jednak, prozę – po krótkim treningu – nadal możemy czytać płynnie, oczywiście biorąc poprawkę na brak polskich znaków diakrytycznych. To dlatego na początku tekstu założyliśmy, że jedna litera to 6 bitów – w poniższym eksperymencie korzystamy z zaledwie 38 różnych znaków.
Kilka literek zmodyfikowałem, parę zwęziłem. Jak wyszło? Dla mnie bomba!
Inwokacja wygląda tak:
Obrazek powyżej jedynie udaje pikselozę, w przeciwnym razie przeglądarka powiększyłaby bitmapę i rozmyła ostre krawędzie. Teraz jednak jedziemy po bandzie i robimy obrazek, który pomieści cały tekst poematu „Pan Tadeusz”, piksel w piksel! Całość zapiszemy w bezstratnym formacie PNG, aby nie pojawiły się żadne niepożądane artefakty.
Jak duży musi być taki obrazek? Nie wiedziałem, dopóki nie sprawdziłem! Oto wynik: tekst „Pana Tadeusza” zmieści się na bitmapie o rozdzielczości 3840 x 2160 pikseli, czyli popularnym 4K UHD! Serio, jeśli masz wypasiony telewizor, bo sprzedawca zachwalał „cztery ka” i głupio było mu przerwać i zrobić przykrość mówiąc, że w sumie wystarczy jedno „ka jak kontrast” i drugie „ka jak kablówkę obsłuży”; więc jeśli masz telewizor „cztery ka” to nareszcie wiesz, do czego się przyda! Gdy dziecko będzie miał przerobić „Pana Tadeusza”, zamiast zasuwać do biblioteki wrzucasz na ekran ten obrazek i z głowy:
Jeśli chcesz wygenerować kopię samodzielnie, zerknij do kodu źródłowego w języku C# (plik tekstowy z poematem znajdziesz tutaj). Nie ma tam żadnej magii – algorytm wczytuje kolejne linie poematu i literka po literce wypełnia kolejne wiersze, przeskakując do nowej kolumny gdy u dołu brakuje miejsca.
Rozmiary monitorów 4K zaczynają się od 27 cali. To około 59×33 cm, nieco więcej niż trzy strony formatu A4. Na takiej właśnie powierzchni zmieściliśmy cały tekst „Pana Tadeusza” i zostało nam jeszcze odrobinę wolnego miejsca. Na tym byłbym artykuł zakończył, gdyby nie dwa dodatkowe pomysły.
Dodatek pierwszy w którym zamiast kilku kartek wystarczy nam jedna wizytówka
Literki, których używaliśmy, miały szerokość trzech pikseli. A gdybym powiedział wam, że użyjemy fontu o szerokości JEDNEGO PIKSELA?! Pewnie mi nie uwierzycie. Sam bym sobie nie uwierzył. Potrzebna jest tylko mała zmiana – zamiast białego tła, użyjemy czarnego.
To, co dla nas jest pojedynczym białym pikselem na ekranie monitora, składa się tak naprawdę z trzech lampeczek świecących na czerwono (R), zielono (G) i niebiesko (B). Te lampeczki to tzw. subpiksele a każdym z nich możemy sterować niezależnie. Jak? Pewnie już się domyślacie – określając kolor całego piksela. Jeśli ustawimy go na czerwony, zaświeci się tylko lewy subpiksel (czerwony, np. nóżka litery F). Jeśli kolor piksela ustawimy na żółty, zaświecą się subpiksele czerwony i zielony (czyli lewy i środkowy, np. centrum litery F). Będzie kolorowo.
Pikselowe przerwy między literami muszą zostać. Cokolwiek mniejszego sprawi, że tekst staje się nieczytelny. To znaczy jeszcze bardziej nieczytelny, bo przecież już teraz jest średnio. Oszczędzamy sporo miejsca, zamiast czterech pikseli na literę (trzy kolumny pikseli z literką i jedna z odstępem) zużywamy dwa (jedna kolumna pikseli z literka plus odstęp). W praktyce obcinamy ponad 1/3 zajętej uprzednio powierzchni, czyli schodzimy poniżej dwóch kartek A4.
Teraz uwaga, będzie grubo. Sięgamy po Sony Xperia Z5 Premium z roku 2015, pierwszy na świecie telefon z ekranem 4K. Przekątna ekranu to 5.5 cala, czyli – według dzisiejszych norm – maleństwo. Zagęszczenie pikseli jest nieprawdopodobne. Zwykły monitor mieści około 70-80 pikseli na cal (ppi), monitor 4K to jakieś 160 ppi, wspomniana Xperia przekracza 800 ppi.
Nasz subpikselowy „Pan Tadeusz” zajmuje niespełna 60% powierzchni obrazka, na ekranie Xperii będzie to jakieś 50 cm kwadratowych. Dla porównania – karta płatnicza albo wizytówka mają po ok. 45 cm2. Do lektury nie wystarczy już lupa, potrzebny będzie mocny mikroskop. Pojedyncza literka będzie miała wysokość jednej dziesiątej milimetra!
Zróbcie chwilę przerwy w lekturze, aby w pełni przyswoić informację, że kompletny tekst „Pana Tadeusza” zajmuje mniej miejsca, niż typowa żółta karteczka-przypominajka.
No więc ten tego. To powyżej to nie była do końca prawda. Wszystkie obliczenia się zgadzają i w ogóle, ale matryce LCD/OLED telefonów często odbiegają od typowego schematu „trzy prostokąty RGB”. Spójrzmy na zdjęcie kilku matryc autorstwa Richarda Lai, naczelnego chińskiej edycji serwisu Engadget:
Widzimy, że matryca Xperii Z5P układa subpiksele tego samego koloru w „jodełkę”, Huawei stosuje układ z podwójną liczbą zielonych subpikseli i tak dalej. To tylko dwa z wielu nietypowych wariantów, z których wiele nie pozwala na sterowanie subpikselami tak, jak monitor ekranowy, więc nasz „Pan Tadeusz” rozmiaru wizytówki jest niestety bardzo naciągany.
Co innego czarno-biały „Pan Tadeusz” na dwóch wizytówkach. Albo na jednej zadrukowanej obustronnie. To spokojnie daje się zrobić, proporcje będą mniej-więcej takie:
Na komórce Huawei P10 Plus (ekran 5.5 cala, rozdzielczość 2560×1440, 530 DPI) porównanie rozmiaru jednogroszówki z rozmiarem wyświetlanego tekstu tekstem wygląda tak, jak poniżej. Makrofotografia telefonu została wklejona w prawym dolnym rogu, wymiary monety dostosowałem do rzeczywistych rozmiarów kadru.
Dodatek drugi, ostateczne starcie: „Pan Tadeusz” o rozmiarach ćwiartki znaczka pocztowego!
Tym razem będzie bez ściemy i przechodzę od razu do rzeczy. Pamiętacie jeszcze aparaty fotograficzne, do których wkładało się rolkę kliszy światłoczułej? Po wypstrykaniu 36 ujęć trzeba było odnieść ją do wywołania. Fotografia nie była wtedy zbyt tanim hobby…
Klisza fotograficzna może zarejestrować dużo szczegółów. Jeśli włożymy ją do dobrego aparatu z wysokiej jakości obiektywem i mocno oświetlimy scenę, może to być naprawdę dużo szczegółów.
Nie będę objaśniał teorii ani metod pomiaru rozdzielczości optycznej, w sieci nie brak obszernych publikacji opisujących te zagadnienia. Wyznaczanym eksperymentalnie parametrem jest liczba sąsiadujących czarno-białych pasków, które rozróżnić da się na jednym milimetrze negatywu.
Zgodnie z wieloma opiniami w internecie, specjalne klisze do fotografii technicznej rejestrowały przeszło 150 par linii na jeden milimetr. Oznacza to 3000 odróżnialnych detali na centymetr, fragment negatywu o bokach 1×1 cm pomieści 9 milionów „pikseli” a pełna klatka 36x24mm odwzoruje ich nawet 80 milionów.
To oznacza, że nasz obraz UHD 3840×2160 (8 megapikseli) zajmie dużo mniej niż ćwiartkę kadru. Możemy więc przestać zastanawiać się, jaką powierzchnię ma wspomniany w śródtytule znaczek pocztowy – przygotowana reprodukcja będzie tak mała, że kompletny tekst „Pana Tadeusza’’ przykryjemy monetą jednogroszową.
Kompletnie nie wiem, co sądzić o produktach w rodzaju ADOX CMS 20 II – według danych producenta ten negatyw potrafi odwzorować nawet 800 par linii na milimetr (1600 pikseli/mm). „Pan Tadeusz” z naszej bitmapy zmieściłby się wówczas w prostokącie 2,5×1,5mm. Może ktoś z czytelników ma tu doświadczenia, którymi mógłby się podzielić?
Gdyby ktoś parający się analogową fotografią studyjną zrealizował ten ekspertyment tzn. sfotografował opublikowaną w tym tekście bitmapę aparatem małoobrazkowym, bardzo proszę o informację, jak wyszło. Chętnie pomogę przy realizacji, gdyby potrzebne były warianty obrazka w innych rozmiarach, proporcjach lub formatach. Wydaje mi się, że należałoby wydrukować tę bitmapę na dobrym papierze w formacie A3 lub większym, bo przy fotografowaniu monitora dużym utrudnieniem będzie efekt mory i polaryzacja światła.
Zakończenie
Nie mam żadnego pomysłu, w jaki sposób moglibyśmy zrealizować jeszcze mniejszą reprodukcję naszej bitmapki bez drogiego sprzętu laboratoryjnego oraz zaawansowanej nauki i techniki. Jeśli coś ci przychodzi do głowy, daj znać w komentarzach.
Za przygotowanie makrofotografii ilustrujących niniejszy tekst bardzo dziękuję Wild’n’Cherry!
„Pan Tadeusz” nie jest pierwszym utworem zreprodukowanym subpikselowo – przed nim na (większą) bitmapę trafił m.in. „Władca Pierścieni” (obrazek 3500×3500 tutaj).
Podczas pracy nad tekstem przydał mi się ten kalkulator DPI.
[dodano 19.09.2021] Oba duże obrazki, ten z tekstem na białym tle i ten subpikselowy z czarnym tłem, dostępne są na licencji public domain Creative Commons Zero (CC0 1.0).
O autorze: zawodowy programista od 2003 roku, pasjonat bezpieczeństwa informatycznego. Rozwijał systemy finansowe dla NBP, tworzył i weryfikował zabezpieczenia bankowych aplikacji mobilnych, brał udział w pracach nad grą Angry Birds i wyszukiwarką internetową Microsoft Bing.
10 odpowiedzi na “Litwo! Ojczyzno moja! Ty jesteś jak PNG 4K UHD!”
Zupełnie bez związku z reprodukcją subpikselową, ale przypomniał mi się mój własny tekst na temat tego, co by było, gdyby Mickiewicz używał gita. 🙂
https://plblog.danieljanus.pl/2014/05/06/kod-gietki/
https://en.m.wikipedia.org/wiki/Microdot
To może nowocześniej? Do QR koda go 😀
Przenosząc obrazek na mikrofilm, używając Computer Output Microfilm, naświetlającego film laserem, na błonie 1000ln/mm, powinno się czytelnie zmieścić w tych kilku mm2 🙂
Czy ktoś świadczy takie usługi w PL? Żeby wysłać plik i dostać negatyw?
Kiedyś to mieliśmy u siebie, stara analogowa naświetlarka AGFA do płyt drukarskich. A format był zacny bo B0, niestety, wszystko poszło w digital. Musiałbyś szukać AGFA Avantor, AGFA Xcalibur, teraz to kosztuje śmieszne pieniądze, chemia cały czas jest dostepna, mimo, że oficjalnie nie przeznaczona do tej maszyny. Używasz półproduktu, czyli wyświeconej w negatywie „kliszy”. Do tego musisz jedynie mieć dobry zaczerniacz (industrial blackener) i do tego coś do zabezpieczenia, żeby się nie starło, jakaś guma w płynie o fajnej przezroczystości.
Przypomniał mi się film od IBM zrobiony za pomocą przesuwania pojedynczych atomów. Być może oni mogliby zrobić jeszcze mniejszego Pana Tadeusza
https://www.youtube.com/watch?v=oSCX78-8-q0
„Obrazek powyżej jedynie udaje pikselozę, w przeciwnym razie przeglądarka powiększyłaby bitmapę i rozmyła ostre krawędzie.”
ponieważ sam obraz jest szerszy niż kolumna tekstu następuje pewne skalowanie, a co za tym idzie i rozmycie
trochę szkoda
„Przekątna ekranu to 5.5 cala, czyli – według dzisiejszych norm – maleństwo”
no nie powiedziałbym, ludzka anatomia się nie zmieniła, więc tak jak był idiotycznie gigantyczny tak nadal jest
Robienie zdjec duzych obiektow jako zapisane na malej kliszy od razu skojarzylo mi sie z zimna wojna. Byc moze nadal jakies sluzby posiadaja odpowiedni sprzet do tego. Tam bym szukal
najciekawszego nie napisałeś jak na współczesnej drukarce laserowej wydrukować jeden pixel.
szukałem jakiegoś opisu PCL5 może coś innego i nic. nie ma takiej opcji, można wydrukować ps ale pixela się nie da bo i tak bedą aproxymować programy samej drukarki. Kto pomoże i powie jak wydrukować takie pixele na drukarce?