Как эти фильтры влияют на вывод imagepng () в PHP?
В документации просто говорится: «Специальный фильтр PNG, используемый функцией imagepng ()» для каждого из них.
Похоже, что использование PNG_NO_FILTER уменьшит размер файла вывода, но, кроме этого, я не уверен, как это повлияет. Любое понимание было бы действительно оценено.
Согласно спецификациям 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