Программное изменение размера изображений в WordPress
Если вам когда-либо приходилось работать с программным изменением размера изображений в WordPress, то вы, возможно, сталкивались с функцией image_resize.
Кроме того, вы можете знать, что это устарело (учитывая, что это отображается в верхней части экрана):
Эта функция устарела. Вместо этого используйте wp_get_image_editor().
И с его устареванием, как это верно для всех тех, кто хорошо справляется с отказом от функциональности, не обошлось без его замены.
В данном случае мы говорим о редакторе изображений WP. Это класс в WordPress, который мы можем использовать для выполнения тех же операций по программному изменению размера изображений, которые мы когда-то могли использовать с исходной функцией.
Чтобы было ясно, этот конкретный пост не является полным руководством по использованию WP_Image_Editor.
Вместо этого это простое руководство о том, как использовать его для изменения размера изображений вместо устаревшей функции, а также некоторые пояснения по пути того, как обрабатывать случаи, в которых могут быть ошибки.
Поиск изображения для использования
В зависимости от того, что вы делаете, вы можете получить имя файла изображения из самого WordPress; однако для этого примера я просто жестко запрограммирую путь к файлу.
Это самый простой способ объяснить, как использовать класс, а не идти по касательной, чтобы программно получить изображение, получить его путь, отправить его в класс редактора и так далее.
Итак, давайте предположим, что заданный путь к изображению выглядит примерно так:
<?php
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
Используя это, мы сохраним его в переменной, которую мы можем передать в другую функцию, если мы хотим работать с исходным файлом несколько раз.
Получение экземпляра редактора изображений
Затем вам нужно получить экземпляр класса редактора изображений, чтобы вы могли работать с изображением, расположенным по указанному выше пути. В своей самой простой форме это не что иное, как передача имени файла в функцию, а затем массива аргументов.
В этом посте меня не интересует массив аргументов — только получение экземпляра редактора, с помощью которого я могу изменить размер изображения.
Чтобы получить экземпляр указанного редактора, просто сделайте следующее:
<?php
// Grab the editor for the filename of the image.
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
$editor = wp_get_image_editor( $filename, array() );
Это вернет либо экземпляр редактора экземпляра экземпляра **[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)**(вместе с сообщением об ошибке и другой информацией, которую вы можете использовать для определения проблемы). Всегда полезно проверить, является ли возвращаемое значение ошибкой, и остановить любые будущие операции.
<?php
// Grab the editor for the file and the size of the original image.
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
$editor = wp_get_image_editor( $filename, array() );
if (is_wp_error($editor)) {
// handle the problem however you deem necessary.
}
Однако, предполагая, что ошибки нет, вы можете начать работать над изменением размера изображения.
Изменение размера изображения
К счастью, это легко сделать. Вам нужны три части информации:
- ширина,
- высота,
- и хотите ли вы обрезать изображение.
По моему опыту, кадрирование изображения почти всегда лучше, чем его отсутствие, потому что оно позволяет избежать странного растяжения или искажения при странных соотношениях сторон.
При изменении размера изображения мне всегда нравится получать текущий размер изображения, а затем использовать множитель для создания новых размеров, на которые я хочу изменить размер изображения.
Например, допустим, у меня есть изображение, и я хочу изменить его ширину на 40% и высоту на 30%. Для этого мне нужно:
- получить размер текущего изображения,
- используйте новую ширину и высоту, чтобы изменить размер изображения.
Программно, вот как вы это сделаете:
<?php
// Grab the editor for the file and the size of the original image.
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
$editor = wp_get_image_editor( $filename, array() );
if (is_wp_error($editor)) {
// Handle the problem however you deem necessary.
}
// Get the dimensions for the size of the current image.
$dimensions = $editor->get_size();
$width = $dimensions['width'];
$height = $dimensions['height'];
// Calculate the new dimensions for the image.
$newWidth = 0.4 * $width;
$newHeight = 0.3 * $height;
// Resize the image.
$result = $editor->resize($newWidth, $newHeight, true);
Достаточно легко следовать, не так ли?
Сохранение изображения
Наконец, осталось только сохранить изображение. В этом случае изображение будет записано в каталог загрузки (и обычно год и месяц, которые предоставляет WordPress).
<?php
// Grab the editor for the file and the size of the original image.
$filename = '/Users/tommcfarlin/Projects/acme/wp-content/uploads/2018/06/original-image.jpg';
if (!file_exists($filename)) {
return;
}
$editor = wp_get_image_editor( $filename, array() );
if (is_wp_error($editor)) {
// handle the problem however you deem necessary.
}
// Get the dimensions for the size of the current image.
$dimensions = $editor->get_size();
$width = $dimensions['width'];
$height = $dimensions['height'];
// Calculate the new dimensions for the image.
$newWidth = 0.4 * $width;
$newHeight = 0.3 * $height;
// Resize the image.
$result = $editor->resize($newWidth, $newHeight, true);
// If there's no problem, save it; otherwise, print the problem.
if (!is_wp_error($result)) {
$editor->save($editor->generate_filename());
} else {
// Handle the problem however you deem necessary.
}
Затем вы можете увидеть окончательную версию, измененную в размере (и названную соответствующим образом) на основе ее вывода.