Что такое EXIF и зачем он нужен
EXIF (Exchangeable Image File Format) — это стандарт, позволяющий добавлять к изображениям и другим файлам метаданные: информацию о камере, настройках съёмки, дате, геолокации и ориентации снимка.
Эти данные записываются камерой или смартфоном при создании фото и могут быть прочитаны специальными инструментами, в том числе PHP‑функцией
exif_read_data().Как EXIF хранит информацию о повороте
Ключевой параметр для определения поворота — поле Orientation (ориентация). Оно принимает значения от
1 до 8, каждое из которых описывает определённое положение камеры при съёмке:
1: нормальное положение (0°);3: повёрнуто на 180°;6: повёрнуто на 90° по часовой стрелке;8: повёрнуто на 90° против часовой стрелки.
Остальные значения (2, 4, 5, 7) описывают зеркальные повороты, которые встречаются реже.
Практический пример на PHP
Шаг 1. Чтение EXIF‑данных
Используйте функцию
exif_read_data(), чтобы получить метаданные изображения:
ВыделитьPHP
$exifData = exif_read_data('path/to/your/image.jpg');Шаг 2. Проверка наличия поля Orientation
Убедитесь, что поле
Orientation присутствует:
ВыделитьPHP
if (isset($exifData['Orientation'])) {
$orientation = $exifData['Orientation'];
echo "Ориентация: $orientation";
} else {
echo "Поле Orientation не найдено.";
}
Шаг 3. Анализ значения Orientation
Сравните значение с известными кодами:
ВыделитьPHP
switch ($orientation) {
case 1:
echo "Изображение не повернуто.";
break;
case 3:
echo "Повернуто на 180°.";
break;
case 6:
echo "Повернуто на 90° по часовой стрелке.";
break;
case 8:
echo "Повернуто на 90° против часовой стрелки.";
break;
default:
echo "Нестандартная ориентация (код $orientation).";
}
Полный рабочий скрипт
ВыделитьPHP
<?php
$imagePath = 'path/to/your/image.jpg';
// Читаем EXIF-данные
$exifData = exif_read_data($imagePath);
if (!$exifData) {
die("Не удалось прочитать EXIF-данные.");
}
// Проверяем ориентацию
if (isset($exifData['Orientation'])) {
$orientation = $exifData['Orientation'];
switch ($orientation) {
case 1:
echo "Изображение в исходной ориентации (0°).";
break;
case 3:
echo "Повернуто на 180°.";
break;
case 6:
echo "Повернуто на 90° по часовой стрелке.";
break;
case 8:
echo "Повернуто на 90° против часовой стрелки.";
break;
default:
echo "Нестандартная ориентация: код $orientation.";
}
} else {
echo "Информация об ориентации отсутствует.";
}
?>
Важные нюансы
- Не все изображения содержат EXIF. Например, скриншоты или картинки, обработанные в редакторах, могут потерять метаданные.
- Некоторые программы автоматически корректируют поворот. Если изображение уже «выправлено» в редакторе, поле Orientation может быть сброшено до 1.
- Формат файла. EXIF поддерживается в JPEG, TIFF и некоторых других форматах, но отсутствует в PNG и WebP.
Альтернативные методы
Если EXIF недоступен, можно попробовать:
- Анализ размеров. Сравните ширину и высоту: если высота > ширины, вероятно, снимок был сделан в портретном режиме.
- Использование библиотек. Например, Imagick или GD в PHP позволяют программно определять и корректировать ориентацию.
Заключение
Функция
exif_read_data() — простой и надёжный способ узнать, был ли повёрнут снимок. Главное — проверять наличие поля Orientation и корректно интерпретировать его значения. Это особенно полезно при разработке фотогалерей, систем загрузки изображений или инструментов для обработки снимков.