2010-06-15 7 views
15

Jak te filtry wpływają na wyjście imagepng() w PHP?W PHP imagepng() akceptuje parametr filtra. Jak te filtry wpływają na wynik działania?

  • PNG_NO_FILTER
  • PNG_FILTER_NONE
  • PNG_FILTER_SUB
  • PNG_FILTER_UP
  • PNG_FILTER_AVG
  • PNG_FILTER_PAETH
  • PNG_ALL_FILTERS

The documentation po prostu mówi "Specjalny filtr PNG, używany przez funkcję imagepng()" dla każdego z nich.

Wygląda na to, że użycie PNG_NO_FILTER zmniejszy rozmiar pliku wyjściowego, ale poza tym nie jestem pewien, jak to wpłynie. Każdy wgląd byłby naprawdę doceniany.

Odpowiedz

14

Według specyfikacji PNG pod http://www.w3.org/TR/PNG-Filters.html Celem tych filtrów jest przygotowanie danych obrazu w celu uzyskania optymalnej kompresji.

Z Brak filtra The Scanline jest przesyłane niezmodyfikowane jest tylko konieczne, aby wstawić bajt typu filtra przed danymi.

Filtr Pod wysyła różnicę pomiędzy każdym bajcie, a wartość odpowiedniego bajtu uprzedniego piksela.

Up filtr jest jak Sub filtrem tą różnicą, że piksel natychmiast powyżej bieżącego piksela, zamiast po prostu po jego lewej stronie, służy jako predyktora.

Średnia filtr używa średnio dwóch pikseli sąsiednich (lewy i powyżej) przewidzieć wartość piksela.

Paeth filtr oblicza prosty liniową funkcję trzech sąsiednich pikseli (lewy, powyżej górnej po lewej), wybiera się jako czynnik prognostyczny piksela sąsiadującego najbliższy obliczonej wartości z. Ta technika jest spowodowana przez Alana W. Paetha [PAETH] .*

+0

Więc którego z nich użyć? – cronoklee

4

Z imagepng() strony człowieka związanego z pytaniem,

filtry

pozwala na zmniejszenie rozmiaru pliku PNG. Jest to pole bitmaskowe, które może być ustawione na dowolną kombinację stałych PNG_FILTER_XXX. PNG_NO_FILTER> lub PNG_ALL_FILTERS mogą być również użyte do odpowiednio wyłączenia lub uaktywnienia wszystkich filtrów.

Więc niech libpng spróbować None, sub, i filtrów, można użyć

PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP 

PNG_ALL_FILTERS jest tylko skrótem

PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH 

Jak dla którego filtr używać , to zależy od obrazu. Obrazy zawierające 256 lub mniej kolorów generalnie kompresują się lepiej z PNG_NO_FILTER, podczas gdy obrazy o wielu kolorach (takie jak zdjęcia) generalnie lepiej kompresują PNG_FILTER_SUB lub PNG_ALL_FILTERS. Aplikacje takie jak "optipng" lub mój "pngcrush" starają się zoptymalizować wybór filtra. Jeśli zamierzasz użyć jednej z tych aplikacji firm trzecich do ostatecznej optymalizacji, powinieneś po prostu użyć PNG_NO_FILTERS do swoich kopii roboczych, dla szybkości.

Powiązane problemy