Дмитрий
11 декабря 2022 г. 0:50

Как открыть изображение с правильной ориентацией инструментами Qt

Некоторые популярные форматы изображений (например jpg) могут содержать метаданные. Одним из них является поворот. Если вы создадите файл в графическом редакторе, затем повернёте его в просмоторщике и в конце загрузите его в своё приложение с помощью классов QImage, QPicture или QPixmap, то обнаружите, что изображение загрузилось c исходной ориентацией. С такой ориентацией изображение и хранится в файле. В тоже время любой графический редактор открывает эту картинку с текущем поворотом. Проблему легко исправить, осуществив поворот на нужный угол. Но указанные выше классы не позволяют его считать.
В попытках решить эту проблему программисты обращаются к модулю multimedia (в частности классу QMediaRecorder и его методу metaData(const Qstring &key). Это ошибка. В решение этого вопроса нам поможет QImageReader и метод transformation().

  1. QImageReader reader("filePath");
  2. int rotor(0);
  3. switch( reader.transformation() ) {
  4. case QImageIOHandler::TransformationRotate90: rotor = 90;
  5. break;
  6. case QImageIOHandler::TransformationRotate180: rotor = 180;
  7. break;
  8. case QImageIOHandler::TransformationRotate270: rotor = 270;
  9. break;
  10. }
  11. QImage image = reader.read();
  12. if( rotor ) {
  13. QTransform tr;
  14. tr.rotate(rotor);
  15. image = image.transformed(tr);
  16. }
  17. QLabel l;
  18. l.resize( image.size() );
  19. l.setPixmap( QPixmap::fromImage(image) );
  20. l.show();

Найти это решение мне помогло подробное исследование документации Qt. Сохранить файл с использованием метаданных можно с помощью класса QImageWriter.

По статье задано0вопрос(ов)

2

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь