QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
ExifUtility.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QByteArray>
4#include <QtCore/QDateTime>
5#include <QtCore/QString>
6
7#include <libexif/exif-data.h>
8
9namespace ExifUtility
10{
11
12// ============================================================================
13// EXIF Data Management
14// ============================================================================
15
18ExifData* loadFromBuffer(const QByteArray &buffer);
19
22ExifData* createNew();
23
29bool saveToBuffer(ExifData *data, QByteArray &buffer);
30
32bool isJpeg(const QByteArray &buffer);
33
36bool isTiff(const QByteArray &buffer);
37
39bool hasExifData(const QByteArray &buffer);
40
41// ============================================================================
42// Tag Reading Helpers
43// ============================================================================
44
46QString readString(ExifData *data, ExifTag tag, ExifIfd ifd = EXIF_IFD_0);
47
49int readShort(ExifData *data, ExifTag tag, ExifIfd ifd = EXIF_IFD_0);
50
52double readRational(ExifData *data, ExifTag tag, ExifIfd ifd = EXIF_IFD_0);
53
54// ============================================================================
55// Tag Writing Helpers
56// ============================================================================
57
61ExifEntry* initTag(ExifData *data, ExifIfd ifd, ExifTag tag);
62
66ExifEntry* createTag(ExifData *data, ExifIfd ifd, ExifTag tag, ExifFormat format, unsigned long components);
67
68// ============================================================================
69// GPS Coordinate Helpers
70// ============================================================================
71
73double gpsRationalToDecimal(ExifEntry *entry, ExifByteOrder order);
74
76void writeGpsCoordinate(ExifEntry *entry, ExifByteOrder order, double value);
77
79void writeRational(ExifEntry *entry, ExifByteOrder order, double value, int denominator = 100);
80
82void writeGpsRef(ExifEntry *entry, char value);
83
85void writeGpsAltRef(ExifEntry *entry, unsigned char value);
86
87// ============================================================================
88// DateTime Helpers
89// ============================================================================
90
95bool writeDateTimeOriginal(ExifData *data, const QDateTime &dateTime);
96
97} // namespace ExifUtility
ExifEntry * initTag(ExifData *data, ExifIfd ifd, ExifTag tag)
double readRational(ExifData *data, ExifTag tag, ExifIfd ifd)
Read a rational value from an EXIF tag.
void writeGpsAltRef(ExifEntry *entry, unsigned char value)
Write a byte value to a GPS altitude reference entry (0=above, 1=below sea level)
bool isTiff(const QByteArray &buffer)
ExifEntry * createTag(ExifData *data, ExifIfd ifd, ExifTag tag, ExifFormat format, unsigned long components)
ExifData * loadFromBuffer(const QByteArray &buffer)
void writeGpsCoordinate(ExifEntry *entry, ExifByteOrder order, double value)
Write GPS coordinate as EXIF rationals (degrees, minutes, seconds)
void writeRational(ExifEntry *entry, ExifByteOrder order, double value, int denominator)
Write a single rational value to an entry.
bool writeDateTimeOriginal(ExifData *data, const QDateTime &dateTime)
bool hasExifData(const QByteArray &buffer)
Check if a buffer contains valid JPEG with EXIF data.
QString readString(ExifData *data, ExifTag tag, ExifIfd ifd)
Read a string value from an EXIF tag.
bool isJpeg(const QByteArray &buffer)
Check if a buffer is a JPEG image (starts with 0xFF 0xD8)
bool saveToBuffer(ExifData *data, QByteArray &buffer)
double gpsRationalToDecimal(ExifEntry *entry, ExifByteOrder order)
Convert GPS coordinate from EXIF rational format (deg/min/sec) to decimal degrees.
ExifData * createNew()
void writeGpsRef(ExifEntry *entry, char value)
Write an ASCII character to a GPS reference entry (N/S/E/W)
int readShort(ExifData *data, ExifTag tag, ExifIfd ifd)
Read a short (16-bit) value from an EXIF tag.