WordPress как на ладони
wordpress jino

jpeg_quality хук-фильтр . WP 2.5

Устанавливает качество сжатия создаваемых JPG файлов.

По умолчанию WordPress создает файлы с качеством сжатия 90%. Этот фильтр позволяет уменьшить или увеличить этот параметр.

В большинстве случаев нет необходимости изменять этот параметр. Однако, если вы хотите сэкономить на нескольких килобайтах, то было бы неплохо установить качество равное 80 или 70.

Изменение этого параметра влияет на качество только создаваемых из оригинала миниатюр, сам оригинал остается не тронутым...

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

add_filter( 'jpeg_quality', 'filter_function_name_11' );
function filter_function_name_11( $quality ) {  
	return 90;
}

Параметры

$quality(число)
Коэффициент качества сжатия. Может быть от 0 (максимальное сжатие) - 100 (без сжатия).

Примеры

#1 Пример использования

Предположим вы фотограф и ведете свой блог. При публикации фотографий, их качество будет уменьшено, но вам нужно чтобы WordPress работал с картинками без уменьшения их качества, т.е. нам нужно 100% качество. Сделать это можно использовав хук jpeg_quality. Для этого вам нужно добавить в файл темы functions.php такой код:

function filter_function_name_11( $quality ) { return 90; }
add_filter( 'jpeg_quality', 'filter_function_name_11' );

Коротко его можно записать так (для версий PHP выше 5.3):

add_filter('jpeg_quality', function($arg){ return 100; } );

Связи хука

Используется в: WP_Image_Editor::set_quality(), wp_save_image_file()

Остальные хуки из: WP_Image_Editor::set_quality():

Остальные хуки из: wp_save_image_file():

Фрагменты кода хука jpeg_quality

Фрагмент из: wp-includes/class-wp-image-editor.php WP 4.8.2
...
				 * Filters the JPEG compression quality for backward-compatibility.
				 *
				 * Applies only during initial editor instantiation, or when set_quality() is run
				 * manually without the `$quality` argument.
				 *
				 * set_quality() has priority over the filter.
				 *
				 * The filter is evaluated under two contexts: 'image_resize', and 'edit_image',
				 * (when a JPEG image is saved to file).
				 *
				 * @since 2.5.0
				 *
				 * @param int    $quality Quality level between 0 (low) and 100 (high) of the JPEG.
				 * @param string $context Context of the filter.
				 */
				$quality = apply_filters( 'jpeg_quality', $quality, 'image_resize' );
			}

			if ( $quality < 0 || $quality > 100 ) {
				$quality = $this->default_quality;
			}
		}

		// Allow 0, but squash to 1 due to identical images in GD, and for backward compatibility.
		if ( 0 === $quality ) {
			$quality = 1;
		}

		if ( ( $quality >= 1 ) && ( $quality <= 100 ) ) {
			$this->quality = $quality;
			return true;
...
Фрагмент из: wp-admin/includes/image-edit.php WP 4.8.2
...
		 * @param mixed           $override  Value to return instead of saving. Default null.
		 * @param string          $filename  Name of the file to be saved.
		 * @param WP_Image_Editor $image     WP_Image_Editor instance.
		 * @param string          $mime_type Image mime type.
		 * @param int             $post_id   Post ID.
		 */
		$saved = apply_filters( 'wp_save_image_file', null, $filename, $image, $mime_type, $post_id );

		if ( null !== $saved )
			return $saved;

		switch ( $mime_type ) {
			case 'image/jpeg':

				/** This filter is documented in wp-includes/class-wp-image-editor.php */
				return imagejpeg( $image, $filename, apply_filters( 'jpeg_quality', 90, 'edit_image' ) );
			case 'image/png':
				return imagepng( $image, $filename );
			case 'image/gif':
				return imagegif( $image, $filename );
			default:
				return false;
		}
	}
}

/**
 * Image preview ratio. Internal use only.
 *
 * @since 2.9.0
 *
...
jpeg_quality 6 комментариев
  • Николай

    Прекрасный сайт, спасибо;
    дизайн, конечно, можно улучшить,
    но наверное, главное не форма, а содержание!

    1
    Ответить2.2 года назад #
  • Kristina

    Кстати, я нашла интересный онлайн сервис, где можно определить или проверить качество сжатия, с каким был сохранён JPG файл: http://www.imgonline.com.ua/determine-jpeg-quality.php

    Ответить2 года назад #
  • Все классно, кроме одного , на всех сайтах описано как работать с загружаемыми изображениями, как поменять размер в зависимости от ширины и длины, ну и общая конвертация.

    Такой вопрос: сайт изображений, на нем картинки - изменять их нельзя (качество очень важно), как сделать на странице attachment проверку вывода изображения по размеру мегабайт, если файл изображения больше 1.5 мб то выводить сжатое и добавить ссылку на исходное, а если меньше, то выводить оригинал ??

    Ответитьгод назад #
    • Kama4464

      Получить размер файла картинки можно так, дальше уже сделайте проверку и допишите код под нужды:

      $attach_id = 7358;
      $meta = wp_get_attachment_metadata( $attach_id );
      
      if ( isset( $meta['filesize'] ) )
      	$file_size = $meta['filesize'];
      elseif ( $file = get_attached_file( $attach_id ) )
      	if( file_exists( $file ) )
      		$file_size = filesize( $file );
      
      echo size_format( $file_size ); //> 19 KB
      Ответитьгод назад #
      • Можно добавить к статье, что сжатие только для миниатюр, оригинал остается не тронутым, хотя выше написано "создаваемых JPG файлов" но сразу не понятно - проверял у себя на сайте, я поставил качество 20% для проверки и оригинал остался не тронутым

Здравствуйте, !

Ваш комментарий