wp_editor_set_qualityхук-фильтрWP 3.5.0

Позволяет изменить стандартное качество сжатия изображения с учётом его 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.

Где вызывается хук

WP_Image_Editor::set_quality()
wp_editor_set_quality
wp_get_image_encode_quality()
wp_editor_set_quality
wp-includes/class-wp-image-editor.php 269
$quality = apply_filters( 'wp_editor_set_quality', $default_quality, $mime_type, $dims ? $dims : $this->size );
wp-includes/media.php 1013
$quality = apply_filters( 'wp_editor_set_quality', $default_quality, $mime_type, $size );

Где используется хук в WordPress

Использование не найдено.