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

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

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

По статті запитували0питання

2

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

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up