Merge branch 'tweaked-exiftag' into dev
This commit is contained in:
@@ -1337,6 +1337,8 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed)
|
|||||||
pl->setProgress (0.0);
|
pl->setProgress (0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool applyExifPatch = false;
|
||||||
|
|
||||||
if (exifRoot) {
|
if (exifRoot) {
|
||||||
rtexif::TagDirectory* cl = (const_cast<rtexif::TagDirectory*> (exifRoot))->clone (nullptr);
|
rtexif::TagDirectory* cl = (const_cast<rtexif::TagDirectory*> (exifRoot))->clone (nullptr);
|
||||||
|
|
||||||
@@ -1379,6 +1381,7 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed)
|
|||||||
// at a different offset:
|
// at a different offset:
|
||||||
TIFFSetWriteOffset (out, exif_size + 8);
|
TIFFSetWriteOffset (out, exif_size + 8);
|
||||||
TIFFSetField (out, TIFFTAG_EXIFIFD, 8);
|
TIFFSetField (out, TIFFTAG_EXIFIFD, 8);
|
||||||
|
applyExifPatch = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1490,6 +1493,38 @@ int ImageIO::saveTIFF (Glib::ustring fname, int bps, bool uncompressed)
|
|||||||
writeOk = false;
|
writeOk = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/************************************************************************************************************
|
||||||
|
*
|
||||||
|
* Hombre: This is a dirty hack to update the Exif tag data type to 0x0004 so that Windows can understand it.
|
||||||
|
* libtiff will set this data type to 0x000d and doesn't provide any mechanism to update it before
|
||||||
|
* dumping to the file.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
if (applyExifPatch) {
|
||||||
|
unsigned char b[10];
|
||||||
|
uint16 tagCount = 0;
|
||||||
|
lseek(fileno, 4, SEEK_SET);
|
||||||
|
read(fileno, b, 4);
|
||||||
|
uint32 ifd0Offset = rtexif::sget4(b, exifRoot->getOrder());
|
||||||
|
lseek(fileno, ifd0Offset, SEEK_SET);
|
||||||
|
read(fileno, b, 2);
|
||||||
|
tagCount = rtexif::sget2(b, exifRoot->getOrder());
|
||||||
|
for (size_t i = 0; i < tagCount ; ++i) {
|
||||||
|
uint16 tagID = 0;
|
||||||
|
read(fileno, b, 2);
|
||||||
|
tagID = rtexif::sget2(b, exifRoot->getOrder());
|
||||||
|
if (tagID == 0x8769) {
|
||||||
|
rtexif::sset2(4, b, exifRoot->getOrder());
|
||||||
|
write(fileno, b, 2);
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
read(fileno, b, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/************************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
TIFFClose (out);
|
TIFFClose (out);
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
fclose (file);
|
fclose (file);
|
||||||
|
@@ -61,11 +61,11 @@ bool extractLensInfo (std::string &fullname, double &minFocal, double &maxFocal,
|
|||||||
|
|
||||||
unsigned short sget2 (unsigned char *s, ByteOrder order);
|
unsigned short sget2 (unsigned char *s, ByteOrder order);
|
||||||
int sget4 (unsigned char *s, ByteOrder order);
|
int sget4 (unsigned char *s, ByteOrder order);
|
||||||
inline unsigned short get2 (FILE* f, ByteOrder order);
|
unsigned short get2 (FILE* f, ByteOrder order);
|
||||||
inline int get4 (FILE* f, ByteOrder order);
|
int get4 (FILE* f, ByteOrder order);
|
||||||
inline void sset2 (unsigned short v, unsigned char *s, ByteOrder order);
|
void sset2 (unsigned short v, unsigned char *s, ByteOrder order);
|
||||||
inline void sset4 (int v, unsigned char *s, ByteOrder order);
|
void sset4 (int v, unsigned char *s, ByteOrder order);
|
||||||
inline float int_to_float (int i);
|
float int_to_float (int i);
|
||||||
short int int2_to_signed (short unsigned int i);
|
short int int2_to_signed (short unsigned int i);
|
||||||
|
|
||||||
struct TIFFHeader {
|
struct TIFFHeader {
|
||||||
|
Reference in New Issue
Block a user