Програмна зміна розміру зображень у WordPress
Якщо вам коли-небудь доводилося працювати зі зміною розміру зображень програмним шляхом у WordPress, можливо, ви стикалися з функцією image_resize.
Крім того, ви можете знати, що його не підтримуємо (враховуючи, що це відображається у верхній частині екрана):
Ця функція застаріла. Натомість використовуйте wp_get_image_editor().
І з його припиненням, як і для всіх тих, хто добре працює над припиненням функціональності, не обійдеться без його заміни.
У цьому випадку ми говоримо про WP Image Editor. Це клас у 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.
}
Потім ви зможете побачити остаточну версію зі зміненим розміром (і відповідною назвою) на основі її результату.