Суффикс "-rotated" для изображений: как WordPress обрабатывает ориентацию изображений
Начиная с версии WordPress 5.3, при загрузке изображений система проверяет метаданные об ориентации изображений. Если метаданные указывают на то, что ориентация изображения отличается от стандартной (как правило, она должна быть равной 1 или вовсе не указываться), WordPress изменяет ориентацию о��игинального изображения, чтобы получить необходимый результат.
Как изменяется ориентация изображения в WordPress
Перед тем как создать промежуточные размеры изображений, WordPress поворачивает изображение в соответствии с метаданными об ориентации и сохраняет результат с суффиксом "-rotated".
Новое изображение с суффиксом "-rotated" теперь считается оригиналом, а путь к нему записывается в метаполе _wp_attached_file
. Таким образом, функции, которые обычно возвращают путь к оригиналу, например:
get_attached_file()
wp_get_attachment_url()
теперь будут возвращать новый путь/URL с суффиксом "-rotated".
При этом оригинальный файл изображения не удаляется и остается в папке загрузок. Информация о наличии оригинала добавляется в метаданные вложения WordPress с ключом original_image
. Путь или URL к исходному изображению можно получить с помощью следующих функций:
wp_get_original_image_path()
wp_get_original_image_url()
Пример работы
Предположим, мы загружаем изображение Landscape_2.jpg
с данными EXIF, указывающими [Orientation] => 2
. В этом случае WordPress создаст другой файл Landscape_2-rotated.jpg
, поместит его рядом с оригиналом в папке загрузок, сделает его основным файлом и добавит название оригинального файла в метаданные:
'original_image' => 'Landscape_2.jpg',
Данные из таблицы wp_postmeta
:
+---------+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| post_id | meta_key | meta_value |
+---------+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| 1863 | _wp_attached_file | 2022/06/Landscape_2-rotated.jpg |
| 1863 | _wp_attachment_metadata | a:7:{s:5:"width";i:1800;s:6:"height";i:1200;s:4:"file";s:31:"2022/06/Landscape_2-rotated.jpg";s:8:"filesize";i:400881;s:5:"sizes";a:6:{s:6:"medium";a:...|
| 1863 | _edit_lock | 1656265849:1 |
+---------+-------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+
Пример массива: _wp_attachment_metadata
[
'width' => 1800,
'height' => 1200,
'file' => '2022/06/Landscape_2-rotated.jpg',
'filesize' => 400881,
'sizes' => [
'medium' => [
'file' => 'Landscape_2-300x200.jpg',
'width' => 300,
'height' => 200,
'mime-type' => 'image/jpeg',
'filesize' => 14295,
],
// Другие размеры...
],
'original_image' => 'Landscape_2.jpg',
]
Общая информация об ориентации изображений
При просмотре изображения браузер или другое ПО читает метаданные об ориентации (Orientation) и автоматически поворачивает изображение, чтобы мы всегда видели его правильно. Это происходит даже если оригинальный файл, например, перевернут.
Зачем WordPress это нужно?
Корректная ориентация важна при создании миниатюр изображений (thumbnail). Если миниатюра создается из исходного изображения с неправильной ориентацией, она тоже будет отображаться некорректно. Чтобы избежать ошибок, WordPress приводит оригинальное изображение к стандартной ориентации, чтобы работать с ним как обычно.
Как отключить функцию преобразования ориентации изображений в WordPress?
Чтобы отключить эту функцию, можно использовать фильтр wp_image_maybe_exif_rotate
, добавив его в файл functions.php
вашей темы:
add_action( 'wp_image_maybe_exif_rotate', '__return_false' );
Полностью отключать эту функцию не рекомендуется, так как она полезна. Если вы хотите избежать создания дублирующего файла с оригинальным изображением, рекомендуется установить мини-плагин, который исправляет некоторые ошибки конвертации в WordPress.
Как это работает
При создании изображения срабатывает цепочка функций:
media_handle_upload()
wp_generate_attachment_metadata()
wp_create_image_subsizes()
wp_get_image_editor()
- Проверяет и корректирует ориентацию, если требуется
$editor = wp_get_image_editor( $file );
$rotated = $editor->maybe_exif_rotate();
if ( true === $rotated ) {
$saved = $editor->save( $editor->generate_filename( 'rotated' ) );
$image_meta = _wp_image_meta_replace_original( $saved, $file, $image_meta, $attachment_id );
}
wp_update_attachment_metadata( $attachment_id, $image_meta );
- Создает промежуточные размеры с помощью
_wp_make_subsizes()
.
Эта система обеспечивает корректное отображение изображений в WordPress, сохраняя их качество и ориентацию.