В 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 уменьшит размер файла вывода, но, кроме этого, я не уверен, как это повлияет. Любое понимание было бы действительно оценено.
Ответы
Ответ 1
В соответствии с спецификациями PNG на http://www.w3.org/TR/PNG-Filters.html Цель этих фильтров - подготовить данные изображения для оптимального сжатия.
С фильтром Нет строка сканирования передается без изменений; это только необходимо вставить байт типа фильтра перед данными.
Суб фильтр передает разница между каждым байтом и значение соответствующего байта предшествующий пиксель.
Фильтр Вверх похож на Sub фильтра, за исключением того, что пиксель непосредственно над текущим пикселем, а не только налево, используется как предиктор.
Средний фильтр использует среднее значение два соседних пикселя (слева и слева выше) для прогнозирования значения пиксели.
Фильтр Paeth вычисляет простой линейная функция трех соседние пиксели (слева, сверху, верхние слева), затем выбирает в качестве предиктора соседний пиксель, ближайший к вычисленное значение. Этот метод Алан У. Пает [PAETH]. *
Ответ 2
Из справочной страницы 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 для своих рабочих копий для скорости.
Ответ 3
Это все разные алгоритмы, которые PNG-кодер может использовать для определения значений пикселей. Не знаю много, но эта страница, по-видимому, выходит на определенную глубину: http://www.w3.org/TR/PNG-Filters.html