Bez przesyłania, 100% lokalnie, bez konta

Artykuł

Dlaczego obrazy tracą jakość z każdym zapisem

Zdjęcie, które wyglądało ostro w rolce aparatu, wychodzi rozmyte po przesłaniu przez kilka czatów grupowych i kilkukrotnym udostępnieniu. Nikt nie edytował go celowo; po prostu przeszło przez kilka przekodowań, a każde z nich odrzuciło trochę więcej szczegółów. To utrata generacji, stara i dobrze poznana właściwość kompresji stratnej, i wyjaśnia, dlaczego mocno udostępniane obrazy stopniowo wyglądają coraz gorzej. Oto, co naprawdę odrzuca stratne przekodowanie, dlaczego się kumuluje i jak powstrzymać dalsze pogarszanie się pliku.

Co naprawdę odrzuca „stratność”

JPEG, format stojący za większością zdjęć udostępnianych online, jest z założenia stratny: stojący za nim standard, ITU-T T.81, działa, przekształcając bloki pikseli na dane częstotliwościowe, a następnie zaokrąglając te dane mniej lub bardziej agresywnie w zależności od ustawienia jakości, krok nazywany kwantyzacją. Zaokrąglenia nie da się dokładnie cofnąć; odrzucony szczegół naprawdę znika, nie jest gdzieś ukryty w pliku. Wysokie ustawienie jakości zaokrągla delikatnie i stratę trudno dostrzec, niskie zaokrągla mocno i plik staje się widocznie rozmyty, ale nawet pojedynczy zapis JPEG zawsze coś odrzuca.

Każde przekodowanie to nowa generacja

Za pierwszym razem, gdy zdjęcie zostaje zapisane jako JPEG, dane pikseli z aparatu są kwantyzowane raz. Ponowne otwarcie tego JPEG i ponowne zapisanie go, nawet bez żadnych edycji, dekoduje już przybliżone piksele i kwantyzuje je po raz drugi, na wierzchu pierwszego zaokrąglenia, a nie zamiast niego. Każdy dodatkowy zapis to kolejna generacja, a każda z nich kumuluje rozmycie w blokach i pasy kolorystyczne, które wprowadziła już poprzednia generacja. Pojedynczy przebieg przy rozsądnym ustawieniu jakości jest niemal niewidoczny; to samo ustawienie zastosowane pięć lub sześć razy z rzędu na tym samym pliku widocznie pogarsza zdjęcie, bo błędy z każdej wcześniejszej generacji nadal tam są, gdy kolejna znowu zaokrągla.

Łańcuch pięciu generacji JPEG: każde przekodowanie zaczyna od pikseli już zaokrąglonych w poprzednim, a obraz staje się widocznie bardziej rozmyty w piątej generacji

Dlaczego mocno udostępniane obrazy wyglądają gorzej

Zdjęcie, które podróżuje przez kilka czatów, feedów i ponownych przesłań, zyskuje nową generację przy niemal każdym przeskoku: aplikacja do wiadomości przekodowuje je na potrzeby czatu, platforma społecznościowa przekodowuje je ponownie na potrzeby własnego procesu dostarczania, ktoś robi zrzut ekranu wyniku i przesyła ten zrzut ponownie, co jest jeszcze jednym pełnym przekodowaniem już pogorszonego obrazu. Żaden z tych kroków nie musi być niedbały ani używać niezwykle niskiego ustawienia jakości, by efekt się sumował; jest to z natury kumulatywne, co dokładnie wyjaśnia, dlaczego obraz krążący szeroko przez długi czas często pokazuje widocznie więcej rozmycia w blokach i pasów kolorystycznych niż świeża kopia tego samego zdjęcia.

Formaty bezstratne nie mają tego problemu

PNG i bezstratny WebP działają inaczej: kompresują, znajdując wzorce w dokładnych danych pikseli i pakując je efektywniej, bez zaokrąglania czegokolwiek. Dlatego dekodowanie i ponowne kodowanie tego samego bezstratnego pliku, bez edycji, odtwarza piksele dokładnie, generacja po generacji. Ta gwarancja to powód, dla którego zrzuty ekranu i grafiki z ostrymi krawędziami lub tekstem zwykle są zapisywane jako PNG, a nie JPEG. Ma to swoją cenę: bezstratny plik typowej fotografii jest dużo większy niż JPEG przy rozsądnej jakości, bo nie ma zaokrąglania, które by go zmniejszyło.

Porównanie dziesięciu ponownych zapisów: JPEG pokazuje narastające widoczne artefakty w blokach, bezstratny PNG pozostaje piksel w piksel identyczny z oryginałem

Utrzymanie jakości pliku pod kontrolą

Łańcuch utraty generacji kumuluje się tylko wtedy, gdy każdy zapis zaczyna od już pogorszonych pikseli poprzedniego zapisu. Zachowanie bezstratnego oryginału, pliku prosto z aparatu lub PNG, i eksportowanie za każdym razem świeżego JPEG z tego oryginału unika nakładania nowego zaokrąglenia na stare. Nasz kompresor obrazów pozwala wybrać ustawienie jakości i zobaczyć wynikowy rozmiar pliku, zanim cokolwiek wyślesz, a nasze narzędzie do porównywania obrazów pokazuje oryginał i skompresowaną kopię obok siebie z suwakiem, więc możesz wychwycić złe ustawienie, zanim prześlesz plik dalej i zaczniesz kolejną generację. Oba działają w całości w przeglądarce: zdjęcie nigdy nie opuszcza twojego urządzenia, by zostać sprawdzone.

Narzędzia w tym artykule

Najczęściej zadawane pytania

Czy kopiowanie lub przenoszenie pliku JPEG go pogarsza?

Nie. Kopiowanie pliku, załączenie go do e-maila czy przenoszenie między folderami kopiuje dokładnie te same bajty; nic nie jest dekodowane ani przekodowywane, więc nic nie jest ponownie kwantyzowane. Utrata generacji zdarza się tylko wtedy, gdy piksele są faktycznie otwierane i ponownie zapisywane, a nie gdy sam plik jest przenoszony.

Czy mogę cofnąć utratę generacji i odzyskać utracone szczegóły?

Nie. Kwantyzacja jest naprawdę stratna: zaokrąglone dane częstotliwościowe odrzucone przy wcześniejszym zapisie nie są nigdzie zapisane w pliku, więc żaden filtr ani algorytm nie może ich odtworzyć. Wyostrzenie lub odszumienie pogorszonego JPEG może sprawić, że artefakty będą wizualnie mniej widoczne, ale nie przywraca oryginalnych szczegółów.

Czy konwersja pogorszonego JPEG na PNG zatrzymuje problem?

Konwersja po tym, jak szkoda już się stała, zachowuje to, jak JPEG już w tym momencie wygląda, piksel w piksel, bez dodawania nowego kroku zaokrąglania, ale nie może przywrócić szczegółów utraconych we wcześniejszych zapisach. Rozwiązaniem jest zacząć zachowywać bezstratny oryginał, zanim powstanie więcej generacji, a nie konwertować zdjęcie późno w łańcuchu.

Źródła