Czy ładowanie bardziej skompresowanych obrazów PNG trwa dłużej?


5

Kiedy tworzę pliki PNG o bardzo małym rozmiarze dysku, mam tendencję do zastanawiania się, czy rozmiar pliku staje się mniej ważny, niż czas potrzebny na dekompresję obrazu przez przeglądających. Technicznie byłoby to również trywialne, ale zastanawiałem się nad tym od dłuższego czasu. Wszyscy wiemy, że bardziej skompresowane obrazy PNG wymagają kompresji dłużej, ale czy dekompresowanie trwa dłużej?

Nie wiem, czy ta informacja wpływa na pytanie, ale zastanawiam się nad tym w odniesieniu zarówno do plików typu ikona (które są małe, ponieważ zawierają kilka pikseli), jak i dużych plików grafiki liniowej (które są małe, ponieważ kompresują swoje piksele bardzo skutecznie).

EDYCJA: W odpowiedzi na otrzymane odpowiedzi chcę zauważyć, że nie jest to wyłącznie problem z siecią. Użytkownicy systemu Windows mogą tego nie zauważyć, ale większość ikon używanych w środowisku pulpitu jest przechowywana z kompresją PNG, a dziesiątki z nich muszą być renderowane podczas uruchamiania systemu. Ogromna grafika liniowa, o której mówiłem, to głównie tapety na pulpit, takie jak te na stronie http://simpledesktops.com/ , ale różne plakaty, zasoby gier wideo i inne rzeczy również mogą pasować do tego opisu.

Odpowiedzi:


1

Obrazy lepiej skompresowane (tj. Z mniejszym rozmiarem pliku) powinny zwykle ładować się krócej niż ten sam obraz o większym rozmiarze.

Jeśli chcesz zminimalizować rozmiar pliku podczas zapisywania pliku PNG, poświęcenie przychodzi w czasie potrzebnym na skompresowanie pliku.

PNG kompresuje dane obrazu za pomocą DEFLATE (ten sam algorytm stosowany w zlib i PKZIP). Jednym ze sposobów, w jaki DEFLATE oszczędza miejsce, jest kodowanie powtarzających się sekwencji bajtów, po prostu poprzez podanie długości przebiegu i odległości z powrotem do miejsca, w którym wcześniej pojawił się w strumieniu. (np. A B C D E F A B C A B C Dmoże być zakodowany jako A B C D E F [3,-6] [4,-9]. (Może również zakodować jako A B C D E F [3,-6] [3,-3] D.)

Sprężarka musi użyć algorytmu, aby wyszukać pasujące sekwencje, zanim będzie mogła je zakodować. Algorytmy są różne, ale wiele z nich można zmusić do cięższej pracy lub przyspieszenia przy użyciu określonych parametrów. Gdy algorytm działa ciężej, może znaleźć więcej lub więcej dopasowań, co zwykle skutkuje lepszą kompresją, ale zajmie to więcej czasu.

Dla kontrastu, algorytm dekompresyjny jest bardzo prosty i nie wymaga wiele pracy - po prostu dekoduje strumień w dość liniowy sposób i nie musi wyszukiwać dopasowań, ponieważ są one dostarczane przez kompresor - po prostu wyszukuje dostarczone kody długości / odległości.

Ogólnie rzecz biorąc, im mniej bitów odczytuje, tym szybsza może być dekompresja PNG.


1

Przeprowadziłem dla ciebie mały eksperyment - nie jest idealny, ale powinien dać trochę wglądu w zakres problemu.

Znalazłem duży plik PNG online, otworzyłem go w GIMP i zapisałem 2 wersje - 1 z poziomem kompresji 9 (bardzo mały) i 1 z poziomem kompresji 0 (duży).

Wysoce skompresowany plik miał 1,8 megs, lekko skompresowany png miał 4,7 megs. Obraz był czymś, co ściągnąłem z Google i był obrazem gromady gwiazd.

Potem napisałem skrypt do konwersji obrazu z png na tif (przy założeniu, że TIF jest stosunkowo nieskompresowanym formatem pliku tak szybko) 200 razy i wyregulowałem czas wyjścia. W każdym przypadku uruchomiłem skrypt szybko i przerwałem go po kilku sekundach, aby każde buforowanie systemu mogło wejść w życie przed uruchomieniem pełnego testu, zmniejszając w ten sposób wpływ dysku io (a mój komputer używa dysku SSD, który również minimalizuje ten wpływ. Wyniki były następujące:

Converting the small file 200 times - 1 minute, 16.07 seconds
Converting the large file 200 times - 1 minute, 22.39 seconds

Tak więc plik wysoce skompresowany wydaje się być około 10 wolniejszy w dekompresji niż plik lekko skompresowany.

Ale nie bierze to pod uwagę czasu pobierania pliku. Będzie to oczywiście zależeć od szybkości twojego połączenia, odległości do serwera i wielkości pliku. Jeśli przesłanie dużego pliku zajmuje więcej niż około 0,5 sekundy, to wtedy (w moim systemie - który jest starszym ultrabookiem, tak powolnym, co daje konserwatywne scenariusze), lepiej wysłać bardziej skompresowany plik plik. W tym przypadku - oznacza to wysyłanie 5,8 megabajtów na sekundę, co równa się - bardzo z grubsza 60 megabitom na sekundę - z wyłączeniem problemów z opóźnieniami.

Wniosek w przypadku dużych plików - jeśli korzystasz z słabo używanej sieci LAN, prawdopodobnie lepiej jest użyć mniej skompresowanego obrazu, ale po przejściu do Internetu korzystanie z bardziej skompresowanego pliku jest lepsze.

BTW, ponownie uruchamiam testy z 1000 iteracjami, zaktualizuję swój post, gdy będę miał te liczby - spodziewam się, że będą bardzo podobne.


1
BTW, poziom kompresji 0 oznacza „brak kompresji”, a nie „minimalną kompresję”.
jjlin

-1

Nie, w rzeczywistości wszystko, co musisz zrobić, to pobrać 64-pikselowy plik png i 64-pikselowy plik jpg, aby przekonać się, że czas potrzebny na dekompresję jest tak nieskończenie mały, że jest nieistotny ... tuż przed uświadomieniem sobie, że masz spędzałem zbyt dużo czasu na myśleniu o tym. :) Ponieważ mówimy o tak małych obrazach zaangażowanych w piksele, które tworzą ikonę. Gdy zwiększysz rozmiar, plik jpg jako format stratny również nie zachowa obrazu. Właśnie tam png jako bezstratny format naprawdę świeci.

Technicznie rzecz biorąc, masz rację, jeśli chodzi o ułamek milisekund poprawy wydajności, którą możesz się wygrzewać za to, że nie musisz rozpakowywać bezstratnego formatu, takiego jak png, po prostu ułamek prawdopodobnie nie zrobi ci wiele dobrego, ponieważ nie będziesz w stanie nic zrobić z zaoszczędzonym czasem. Jpg jest użyteczny tylko dlatego, że wciąż może zachować 90% swojej jakości przy 64 pikselach, nawet jeśli sprowadza się do niewielkiej części oryginalnego detalu, który jest po prostu zbyt mały, aby zauważyć. PNG jest prawie tak samo celny, a jego jakość jak format bezstratny wcale nie ucierpi, co czyni go zdecydowanie lepszym wyborem IMO.

Czy jest jakiś pragmatyczny powód, dla którego tak długo się nad tym zastanawiałeś?

Pomoże ci to lepiej zrozumieć, co uważasz za „ogromne pliki lineart”, jeśli masz jakieś uzasadnione pytanie o to, dokąd zmierzasz.


1
To pytanie nie dotyczy JPEG, a powiedzenie „to pytanie jest bezcelowe” nigdy nie jest doceniane. Nie będę głosować, bo jesteś nowy; pamiętaj to.
Wutaz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.