EXIF данные изображений
Приветствую. Есть известная проблема: при сохранении QImage в файл он не сохраняет EXIF данные. Долго думал и искал, в результате остановился на QImageExifHeader. Штука эта очень удобная и работает. НО, работает со всеми изображениями, кроме тех, которые сохранены QImage. Они получаются битыми и нечитаемыми, испорчены. При этом если редактировать теги других файлов (не сохраненных через QImage, а полученных из других источников), то все нормально работает.
Что делать? Какой выход?
Заранее спасибо.
Что делать? Какой выход?
Заранее спасибо.
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.Magst du es? In sozialen Netzwerken teilen!
Kommentare
sf
- sdfsdfkp fgskpgokspdog
- 14. Oktober 2024 15:09
C++ - Тест 004. Указатели, Массивы и Циклы
- Ergebnis:90punkte,
- Bewertungspunkte8
МВ
- Максим Васильев
- 2. Oktober 2024 04:14
Qt - Тест 001. Сигналы и слоты
- Ergebnis:68punkte,
- Bewertungspunkte-1
ЛС
- Лев Семенов
- 30. September 2024 11:04
C++ - Тест 001. Первая программа и типы данных
- Ergebnis:53punkte,
- Bewertungspunkte-4
Letzte Kommentare
ИМ
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов5. Oktober 2024 07:51
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5. Februar 2024 01:50
EVA25. Dezember 2023 10:30
Jetzt im Forum diskutieren
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь Максимов3. Oktober 2024 04:05
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
Кирилл Гусарев27. September 2024 09:09
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
Полагаю, что нужно использовать сторонние библиотеки. Например, libpng или libjpeg.
Например, забрать полезную нагрузку из QImage и сохранить через обычный FILE с использованием ligpng или libjpeg.
Полагаю, что таким образом можно будет обойти проблему с QImage, но это по сути пересохранение изображения, только другими средствами.
Ну и нужно поискать информацию по поддержке EXIF этими сторонними библиотеками.
Как вариант, свой велосипед, который будет модифицировать заголовок.
То есть проанализировать файл после QImage, и попытаться добавить недостающие данные.
В QImage также присутствует метод setText(const QString &key, const QString &text), который может быть использован для добавления текстовой информации. Стоит посмотреть его работу.
Также, попробовать расширить заголовок, сдвинув полезную нагрузку, прежде чем записывать EXIF данные.
Вот код:
Прикрепляю ссылку на файлы h/cpp и тестовые изображения. 1.jpg получено с камеры телефона, а 2.jpg пересохранено с помощью QImage. При попытке переноса тегов из 1.jpg в 2.jpg второе изображение становится поврежденным. При таких же действиях над изображениями, полученными не с помощью QImage — все работает нормально.
Ссылка
Интересная проблема.
В файле, сохранённом с QImage, изначально отсутствует маркер и заголовок с EXIF.
В случае с обычными фотографиями, обработка идёт по одной ветке кода. И EXIF просто перезаписывается.
В случае же с QImage, обработка идёт по совершенно другой ветке кода.
Тогда всё изображение сдвигается вместе со своим изначальным заголовком и в начало вписывается копированный заголовок с EXIF. Также там до кучи накидываются ещё маркеры, которые даже не позволяют определить, с какого места записываются данные с EXIF. Во всяком случае обычный просмоторщик или Photoshop вообще не понимают, с какого места начался блок с изображением, а с какого заголовок с EXIF.
Также я заметил, что портятся данные в заголовке EXIF, при копировании они получают местами битовый сдвиг, что тоже странно.
Ну и похоже на то, что информация в части с EXIF конфликтует с заголовочной информацией изображения. Там разные таблицы квантования изображения получаются. Из-за этого просмоторщики оказываются не в состоянии отобразить изображение, поскольку ориентируются на информацию в EXIF, если вообще находят её.
Так что, или допиливать QExifImageHeader, или искать другую библиотеку.