Дмитрий
11 грудня 2022 р. 00:50

Як відкрити зображення з правильною орієнтацією інструментами Qt

Деякі популярні формати зображень (наприклад, jpg) можуть містити метадані. Одним із них є поворот. Якщо ви створите файл у графічному редакторі, потім повернете його в просмоторнику і в кінці завантажте його у свою програму за допомогою класів QImage, QPicture або QPixmap, виявите, що зображення завантажилося з вихідною орієнтацією. З такою орієнтацією зображення зберігається у файлі. У той же час, будь-який графічний редактор відкриває цю картинку з поточним поворотом. Проблему легко виправити, здійснивши поворот на потрібний кут. Але зазначені вище класи не дозволяють його рахувати.
У спробах вирішити цю проблему програмісти звертаються до модуля 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

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…