В PHP imagepng () принимает параметр фильтра.Как эти фильтры влияют на вывод функции? - PullRequest
15 голосов
/ 15 июня 2010

Как эти фильтры влияют на вывод imagepng () в PHP?

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

Документация просто говорит: «Специальный фильтр PNGИспользуется функцией imagepng () для каждого из них.

Кажется, что использование PNG_NO_FILTER уменьшит размер файла вывода, но кроме этого, я не уверен относительно того, как это повлияет.Любое понимание будет очень признателен.

Ответы [ 3 ]

14 голосов
/ 15 июня 2010

В соответствии со спецификациями PNG на http://www.w3.org/TR/PNG-Filters.html Цель этих фильтров - подготовить данные изображения для оптимального сжатия.

С фильтром Нет , линия сканирования передано немодифицированным; это только необходимо вставить байт типа фильтра до данных.

Дополнительный фильтр передает Разница между каждым байтом и значение соответствующего байта предыдущий пиксель.

Фильтр Up похож на Sub фильтр за исключением того, что пиксель непосредственно над текущим пикселем, а не только слева, используется как предиктор.

Фильтр Среднее использует среднее значение два соседних пикселя (слева и выше), чтобы предсказать значение пиксели.

Фильтр Паэта вычисляет простое линейная функция трех соседние пиксели (слева, сверху, сверху слева), а затем выбирает в качестве предиктора соседний пиксель, ближайший к вычисленное значение. Эта техника обусловлена Алану У. Паэту [PAETH]. *

4 голосов
/ 04 декабря 2015

Со страницы руководства imagepng (), связанной с вопросом,

filters

Позволяет уменьшить размер файла PNG.Это поле битовой маски, которое может быть установлено в любую комбинацию констант PNG_FILTER_XXX.PNG_NO_FILTER> или PNG_ALL_FILTERS также можно использовать для соответствующего отключения или активации всех фильтров.

Таким образом, чтобы libpng попробовал фильтры none, sub и up, вы должны использовать

PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP

PNG_ALL_FILTERS - это просто сокращение для

PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH

От того, какой фильтр использовать, зависит от изображения.Изображения с 256 или менее цветами обычно сжимаются лучше с PNG_NO_FILTER, в то время как изображения с большим количеством цветов (например, фото) обычно сжимаются лучше с PNG_FILTER_SUB или PNG_ALL_FILTERS.Такие приложения, как «optipng» или «pngcrush», пытаются оптимизировать выбор фильтра.Если вы собираетесь использовать одно из этих сторонних приложений для окончательной оптимизации, вам просто нужно использовать PNG_NO_FILTERS для ваших рабочих копий, для скорости.

2 голосов
/ 15 июня 2010

Это все разные алгоритмы, которые PNG-кодер может использовать для определения значений пикселей. Не очень много знаю, но эта страница, похоже, углубилась: http://www.w3.org/TR/PNG-Filters.html

...