WordPress как на ладони
Плагин рекламы для WordPress wordpress jino

wp_get_image_editor() WP 3.5

Возвращает объект WP_Image_Editor с указанной картинкой. Используется для изменения размеров изображения (создания миниатюр) и редактирования картинки.

Над картинкой можно производить разные действия: уменьшать, поворачивать, переворачивать и т.д. Все это делается по средствам методов класса WP_Image_Editor (англ).

Измененную картинку легко можно сохранить в указанное место, см. пример.

Класс WP_Image_Editor расположен в файле: /wp-includes/class-wp-image-editor.php

Хуков нет.

Возвращает

Объект WP_Image_Editor или объект WP_Error, если не удалось получить картинку по переданному УРЛ или другой ошибки.

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

$image_editor = wp_get_image_editor( $path, $args );
$path(строка) (обязательный)
Путь до картинки-оригинала, на основе которой будем создавать копию.
$args(массив)
Дополнительные данные. Принимает: mime тип изображения и методы: mime_type, methods.
По умолчанию: array()

Примеры

#1 Создадим уменьшенную копию изображения

Предположим у нас есть картинка '/wp-content/uploads/2014/02/uka.png' (лежит на нашем сервере). Этот пример показывает, как создать уменьшенную копию этой картинки с помощью класса WP_Image_Editor:

// загружаем объект
$image = wp_get_image_editor( $_SERVER['DOCUMENT_ROOT'].'/wp-content/uploads/2014/02/uka.png' );
// можно указать УРЛ, вместо абсолютного пути:
// $image = wp_get_image_editor( 'http://wp-kama.ru/wp-content/uploads/2014/02/uka.png' );

// обрабатываем картинку
if ( ! is_wp_error( $image ) ) {
	// повернем картинку на 90 градусов
	$image->rotate( 90 );
	// уменьшим её до размеров 80х80
	$image->resize( 80, 80, true );
	// сохраним в корне сайта под названием new_image.png
	$image->save( $_SERVER['DOCUMENT_ROOT'].'/new_image.png' );
}

Методы класса которые можно использовать для изменения изображения

Не нужно напрямую использовать класс редактора, лучше всегда использовать эту функцию - wp_get_image_editor(), которая является оберткой для класса WP_Image_Editor.

Методы

supports_mime_type( $mime_type )
Проверяет поддерживает ли редактор указанный mime тип.
save( $destfilename = null, $mime_type = null )
Сохраняет текущую картинку в файл.
resize( $max_w, $max_h, $crop = false )

Изменяет размер текущего изображения.

Параметр $crop определяет нужно ли кадрировать изображение при уменьшении его размера и как кадрировать. Возможные значения параметра $crop:

  • false (по умолчанию) - картинка не будет кадрироваться, а будет уменьшена как есть пропорционально.
  • true - будет кадрироваться до указанных размеров от центра изображения.
  • массив - картинка будет кадрироваться до указанных размеров внутри указанной области. Область указывается в виде массива array( x_crop_position, y_crop_position ):
    • x_crop_position - может быть: 'left', 'center', или 'right'.
    • y_crop_position - может быть: 'top', 'center', или 'bottom'.
multi_resize( $sizes );
Обрабатывает текущую картинку и сохраняет на диск несколько указанных размеров сразу из одной обрабатываемой картинки.
crop( $src_x, $src_y, $src_w, $src_h, $dst_w = null, $dst_h = null, $src_abs = false )
Кадрирует изображение.
rotate( $angle )
Rotates current image counter-clockwise by $angle.
flip( $horz, $vert )
Переворачивает изображение по горизонтали, вертикали или и то и то.
stream( $mime_type = null )
Выводит текущее изображение в браузер.
get_size()
Получает расширение картинки как массив с ключами: 'width' и 'height'.
update_size( $width = null, $height = null )
Устанавливает размер текущего изображения.
set_quality( $quality )
Устанавливает качество сжатия для JPG файлов. Указывается число от 1 до 100, которое соответствует процентам: 100% - лучшее качество 50% плохое качество, но сильное сжатие и меньший размер файла.
По умолчанию: 90
get_output_format( $filename = null, $mime_type = null )
Получает предпочитаемый mime тип и расширение получаемое на основе расширения файла или mime типа. По умолчанию берет значение свойства $this->default_mime_type определенное разрешение не поддерживается.
generate_filename( $suffix = null, $dest_path = null, $extension = null )
Создает итоговое название файла на основе текущего файла и соответствующего размерам суффикса.
get_suffix()
Строить и возвращает суффикс для названия файла на основе ширины и высоты.
make_image( $filename, $function, $arguments )
Вызывает save функцию редактора или обрабатывает файл когда $filename передан как поток. В $function и $arguments обычно указывается одна из функций: imagegif(), imagepng(), imagejpeg() и её параметры.
get_mime_type( $extension = null )
Получает mime по указанному расширению, например jpg. См. wp_get_mime_types().
get_extension( $mime_type = null )
Получает расширение по указанному mime типу. См. wp_get_mime_types().

Код wp get image editor: wp-includes/media.php WP 4.8

<?php
function wp_get_image_editor( $path, $args = array() ) {
	$args['path'] = $path;

	if ( ! isset( $args['mime_type'] ) ) {
		$file_info = wp_check_filetype( $args['path'] );

		// If $file_info['type'] is false, then we let the editor attempt to
		// figure out the file type, rather than forcing a failure based on extension.
		if ( isset( $file_info ) && $file_info['type'] )
			$args['mime_type'] = $file_info['type'];
	}

	$implementation = _wp_image_editor_choose( $args );

	if ( $implementation ) {
		$editor = new $implementation( $path );
		$loaded = $editor->load();

		if ( is_wp_error( $loaded ) )
			return $loaded;

		return $editor;
	}

	return new WP_Error( 'image_no_editor', __('No editor could be selected.') );
}

Cвязанные функции

Из метки: thumbnail (image картинки-миниатюры)

wp_get_image_editor 8 комментариев
  • Антон

    Блин, а как увеличить? исходное изображение 300х200, а мне нужно программно 400х300

  • avense4 cайт: videovegas.ru
    @

    1) Как задать качество обрабатываемой картинки?

    2) А есть возможность сделать, что бы если картинка меньше заданных в функции размеров, то она сначала увеличивалась пропорционально, а после обрезалась до нужных размеров?

    Пробовал обрабатывать картинку меньших размеров чем задано в $image->resize( ... ), но она не обрезается в этом случае и её размеры (высота/ширина) не меняются.

    • Kama4398

      1) не понял вопрос

      2) нет нельзя - это не логично с точки зрения качества картинки...

  • Павел

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

    Как сразу её вывести на лету в браузер, не сохраняя на диск? Как это делал timthumb.php.

    Ответить4 месяца назад #
  • Подскажите, с помощью этой функции можно уменьшить очень большие изображения, например, 2000x3000 px? Когда-то пробовал со стандартной функцией php по обработке изображений, но она ограничена серверной ОЗУ и уменьшать большие изображения отказалась((
    А мне ой как надо))!

    Ответить20 дней назад #
    • Kama4398

      Точно не знаю, опыта нет. Но уверен она тоже в размер ОЗУ упирается. От сервака зависит значит. Но сейчас опер.память везде большая и 2000х3000 должна эта функция потянуть.

      При обработке она пытается увеличить лимит памяти до максимума.

      Ответить20 дней назад #
      • Что-то у меня с этой функцией ничего не получилось. Вполне вероятно, что я делаю что-то не так.
        Поставил код, найденный в Интернете, пока работает:

            $size = getimagesize($avatar);
        	if ($size[0]>310) {  
        	$newavatar = str_replace ('xxxxxxxxxxx', '', $avatar);
        	$filename = $_SERVER['DOCUMENT_ROOT'].$newavatar;
        	$width = 300; // задание максимальной ширины и высоты
        	$height = 200;
        	// получение новых размеров
        	list($width_orig, $height_orig) = getimagesize($filename);
        	$ratio_orig = $width_orig/$height_orig;
        	if ($width/$height > $ratio_orig) {
        	$width = $height*$ratio_orig;
        	} else {
        	$height = $width/$ratio_orig;
        	}
        	// ресэмплирование
        	$image_p = imagecreatetruecolor($width, $height);
        	$image = imagecreatefromjpeg($filename);
        	imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
        	imagejpeg($image_p, $filename); 
        	}
        

        Правда пока не придумал как вызывать функцию. В идеале ее надо вызвать всего 1 раз за все время, а у меня сейчас каждый раз проверяются размеры картинки.

        Ответить14 дней назад #

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

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