Некоторые популярные форматы изображений (например jpg) могут содержать метаданные. Одним из них является поворот. Если вы создадите файл в графическом редакторе, затем повернёте его в просмоторщике и в конце загрузите его в своё приложение с помощью классов QImage, QPicture или QPixmap, то обнаружите, что изображение загрузилось c исходной ориентацией. С такой ориентацией изображение и хранится в файле. В тоже время любой графический редактор открывает эту картинку с текущем поворотом. Проблему легко исправить, осуществив поворот на нужный угол. Но указанные выше классы не позволяют его считать.
В попытках решить эту проблему программисты обращаются к модулю multimedia (в частности классу QMediaRecorder и его методу metaData(const Qstring &key). Это ошибка. В решение этого вопроса нам поможет QImageReader и метод transformation().
QImageReader reader("filePath"); int rotor(0); switch( reader.transformation() ) { case QImageIOHandler::TransformationRotate90: rotor = 90; break; case QImageIOHandler::TransformationRotate180: rotor = 180; break; case QImageIOHandler::TransformationRotate270: rotor = 270; break; } QImage image = reader.read(); if( rotor ) { QTransform tr; tr.rotate(rotor); image = image.transformed(tr); } QLabel l; l.resize( image.size() ); l.setPixmap( QPixmap::fromImage(image) ); l.show();
Найти это решение мне помогло подробное исследование документации Qt. Сохранить файл с использованием метаданных можно с помощью класса QImageWriter.