Автоматическая ротация изображений в WordPress — это полезная функция, которая корректирует ориентацию фотографий на основе EXIF-метаданных. Однако в некоторых случаях эта функция может приводить к неожиданным результатам, особенно если изображения уже отредактированы или содержат некорректные данные EXIF. В этой статье мы подробно рассмотрим, как отключить авторотацию изображений в WordPress, а также приведём примеры кода и рекомендации по плагинам.
Почему отключать авторотацию изображений в WordPress
По умолчанию WordPress использует библиотеку imagick или GD для обработки изображений. При загрузке фотографий с камер или телефонов система автоматически поворачивает их в соответствии с ориентацией, заданной в EXIF. Однако бывают ситуации, когда:
- Функция ротации приводит к нежелательным перекрутам;
- Изображения сохраняются с уже правильной ориентацией, и повторная ротация ухудшает качество;
- Отсутствуют или повреждены EXIF-данные, что вызывает неправильное отображение.
В таких случаях логично отключить автоматическую ротацию и взять контроль над обработкой изображений в свои руки.
Как отключить авторотацию изображений через фильтр WordPress
Для отключения авторотации потребуется использовать фильтр WordPress wp_image_editors, чтобы убрать поддержку библиотеки imagick, которая отвечает за автоматическую ротацию. Вместо неё можно использовать GD, который не поддерживает авторотацию по EXIF.
Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wpkit_disable_imagick_autorotate($editors) {
// Убираем Imagick из списка редакторов изображений
$gd_editor = 'WP_Image_Editor_GD';
$editors = array_diff($editors, array('WP_Image_Editor_Imagick'));
// Проверяем, что GD доступен
if (in_array($gd_editor, $editors)) {
return array($gd_editor);
}
return $editors;
}
add_filter('wp_image_editors', 'wpkit_disable_imagick_autorotate');Этот код отключит использование Imagick и переключит обработку изображений на GD, что автоматически отключит авторотацию.
Плюсы и минусы такого подхода
Плюсы:
- Простое решение без использования дополнительных плагинов;
- Полный контроль над обработкой изображений;
- Отмена автоматической ротации, если она мешает.
Минусы:
- GD менее функционален по сравнению с Imagick (меньше возможностей для обработки);
- Может ухудшиться качество сжатия и преобразований;
- Если сервер не поддерживает GD, решение не сработает.
Использование плагинов для отключения авторотации
Если вы предпочитаете готовое решение, есть несколько плагинов, которые позволяют контролировать поведение обработки изображений, включая авторотацию:
- Disable Image Rotation — простой плагин, который отключает авторотацию без сложных настроек.
- Clearfy Pro — мощный инструмент оптимизации, который позволяет отключать ряд функций WordPress, в том числе автоматическую обработку изображений. Рекомендуется для комплексной оптимизации сайта.
Плагины удобны тем, что не требуют правки кода и позволяют гибко управлять настройками.
Обработка изображений с отключённой авторотацией своими силами
Если отключить автоматическую ротацию, вам может понадобиться самостоятельно обрабатывать ориентацию загружаемых изображений. Для этого можно использовать PHP и библиотеку exif_read_data для получения ориентации и последующего поворота с помощью GD.
function wpkit_manual_image_rotation($file) {
$exif = @exif_read_data($file);
if (!$exif || !isset($exif['Orientation'])) {
return;
}
$orientation = $exif['Orientation'];
$image = imagecreatefromjpeg($file);
switch ($orientation) {
case 3:
$image = imagerotate($image, 180, 0);
break;
case 6:
$image = imagerotate($image, -90, 0);
break;
case 8:
$image = imagerotate($image, 90, 0);
break;
default:
return;
}
imagejpeg($image, $file);
imagedestroy($image);
}
add_action('wp_handle_upload', 'wpkit_manual_image_rotation');Этот код автоматически поворачивает JPEG-изображения при загрузке в соответствии с ориентацией EXIF, когда стандартная авторотация отключена. Такое решение даёт полный контроль над процессом и позволяет избежать ошибок.
Особенности и рекомендации
Для корректной работы функции exif_read_data необходимо, чтобы на сервере была включена поддержка EXIF. Код обрабатывает только JPEG-изображения, так как другие форматы, например PNG, не содержат EXIF.
Обратите внимание, что при повторном сохранении изображений с помощью GD может немного снижаться качество, поэтому лучше оптимизировать изображения заранее.
Что делать, если нужна частичная авторотация
В некоторых случаях хочется оставить авторотацию только для определённых типов изображений или размеров. Для этого можно модифицировать фильтр и добавлять свою логику обработки.
function wpkit_custom_image_editors($editors, $image) {
// Пример: отключаем Imagick только для изображений больше 2 МБ
$file = isset($image->file) ? $image->file : '';
if ($file && filesize($file) > 2 * 1024 * 1024) {
return array('WP_Image_Editor_GD');
}
return $editors;
}
add_filter('wp_image_editors', 'wpkit_custom_image_editors', 10, 2);Такой подход позволит гибко управлять обработкой и отключать авторотацию только в нужных случаях, не жертвуя качеством для небольших файлов.