В PHP, imagepng () принимает параметр фильтра. Как эти фильтры влияют на вывод функции?

Как эти фильтры влияют на вывод 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 уменьшит размер файла вывода, но, кроме этого, я не уверен, как это повлияет. Любое понимание было бы действительно оценено.

Solutions Collecting From Web of "В PHP, imagepng () принимает параметр фильтра. Как эти фильтры влияют на вывод функции?"

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

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

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

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

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

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

Из справочной страницы imagepng (), связанной с вопросом,

фильтры

Позволяет уменьшить размер файла 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 для своих рабочих копий для скорости.

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