wp_editor_set_quality
Позволяет изменить стандартное качество сжатия изображения с учётом его MIME-типа и размеров.
В редакторе изображений применяется при инициализации или вызове WP_Image_Editor::set_quality() без указания качества. Явно переданное в метод значение имеет приоритет над фильтром.
При клиентской обработке изображений WordPress также применяет фильтр отдельно для каждого создаваемого размера и передаёт полученное качество браузеру.
Для JPEG после этого фильтра применяется jpeg_quality, который может изменить полученное значение.
Рекомендуемое качество изображений
| Формат | Обычное | Высокое |
|---|---|---|
| JPEG | 80-85 |
88-92 |
| WebP | 75-80 |
82-88 |
| AVIF | 50-60 |
60-70 |
| HEIC | 55-65 |
65-75 |
| PNG | без потерь | без потерь |
Оптимальные значения для большинства сайтов: JPEG - 82, WebP - 78, AVIF - 55.
Значения качества разных форматов нельзя сравнивать напрямую. Например, AVIF с качеством 55 может выглядеть как JPEG с качеством 82, но занимать меньше места. Для PNG параметр качества обычно управляет степенью сжатия, а не визуальным качеством изображения.
Использование
add_filter( 'wp_editor_set_quality', 'wp_kama_editor_set_quality_filter', 10, 3 );
/**
* Function for `wp_editor_set_quality` filter-hook.
*
* @param int $quality Quality level between 1 (low) and 100 (high).
* @param string $mime_type Image mime type.
* @param array $size Dimensions of the image.
*
* @return int
*/
function wp_kama_editor_set_quality_filter( $quality, $mime_type, $size ){
// filter...
return $quality;
}
- $quality(int)
- Стандартное качество сжатия от
1- минимальное, до100- максимальное. - $mime_type(string)
- MIME-тип выходного изображения. Например,
image/jpeg,image/webpилиimage/avif. - $size(array)
Размер выходного изображения.
-
width(int)
Ширина в пикселях. - height(int)
Высота в пикселях.
-
Примеры
#1 Уменьшение качества небольших JPEG-изображений
Устанавливает качество 60 для JPEG-изображений шириной меньше 300 пикселей.
add_filter( 'wp_editor_set_quality', 'kama_set_small_jpeg_quality', 10, 3 );
function kama_set_small_jpeg_quality( $quality, $mime_type, $size ) {
if (
'image/jpeg' === $mime_type
&& isset( $size['width'] )
&& $size['width'] <= 300
) {
return 60;
}
return $quality;
}
#2 Разное качество для каждого формата
Устанавливает отдельное качество для JPEG, WebP и AVIF.
add_filter( 'wp_editor_set_quality', 'kama_set_image_quality_by_format', 10, 3 );
function kama_set_image_quality_by_format( $quality, $mime_type, $size ) {
$quality_by_format = [
'image/jpeg' => 82,
'image/webp' => 78,
'image/avif' => 55,
];
return $quality_by_format[ $mime_type ] ?? $quality;
}
PNG и GIF используют сжатие без потери качества. Значение фильтра для них не управляет качеством изображения одинаково во всех редакторах WordPress, поэтому задавать для них отдельное значение ненадёжно.
Список изменений
| С версии 3.5.0 | Введена. |
| С версии 6.8.0 | Added the $size parameter. |
Где вызывается хук
$quality = apply_filters( 'wp_editor_set_quality', $default_quality, $mime_type, $dims ? $dims : $this->size );
$quality = apply_filters( 'wp_editor_set_quality', $default_quality, $mime_type, $size );