Bug #900
TIFF images lose XMP packet on write if exiv2 was compiled without XMP support
100%
Description
I've played a bit with the library and so far I can tell that there is a strange behavior with the xmp handling. I've found a workaround that is suitable for me but maybe you are interested about this feedback:
- Compile exiv2 without xmp support.
- Open an image already containing XMLpacket data.
- Write any exif metadata on it and save.
The resulting image have the xml packet removed in case of tiff format. For jpeg format, the xml packet is still there. My guess is the second behavior is the good one... To have the same behavior for tiff I had to comment the encodeXmp() in tiffvisitor.cpp...
Reported by Loïc Carrère
Related issues
Associated revisions
History
Updated by Robin Mills over 8 years ago
- Status changed from New to Assigned
- Assignee set to Robin Mills
Updated by Robin Mills over 6 years ago
- Target version changed from 0.25 to 0.26
Fix submitted: r3739
This is an interesting issue. Notes about various files formats can be found on the Exiv2 Wiki.
JPEG files consists of a number of variable length segments which store different kinds of data. Exif and XMP Metadata are contained in APP1 segments. When the library writes a file, it either rewrites a segment, or does a binary copy. When XMP has not been built into the library, the APP1/XMP packet is binary copied to the output file.
TIFF also contain variable length segments of which one is XMLpacket. The code in tiffvisitor.cpp encodeXMP() is used to recover XMP metadata from the non-existing XMPsdk and writes nothing! It has obliterated the XMLpacket.
Your suggested fix to comment out the code in tiff visitor.cpp encodeXMP() is perfect. The body of encodeXMP() is empty when #ifndef EXV_HAVE_XMP_TOOLKIT
This is not easy to test from our test harness because we normally build and test with --enable-xmp. However, I've built and manually tested this as follows on JPEG/PNG/TIFF images. The XMP data is preserved for TIFF files when XMPsdk has not been build with the library. This behaviour is consistent for JPEG/TIFF and PNG.
JPEG:
$ exiv2 -pS jpg.jpg STRUCTURE OF JPEG FILE: jpg.jpg address | marker | length | data 2 | 0xd8 SOI 4 | 0xe1 APP1 | 14862 | Exif..II*..................... 14868 | 0xe1 APP1 | 2720 | http://ns.adobe.com/xap/1.0/.< 17590 | 0xed APP13 | 110 | Photoshop 3.0.8BIM.......6.... 17702 | 0xe2 APP2 | 4094 | MPF.II*...............0100.... 21798 | 0xdb DQT | 132 21932 | 0xc0 SOF0 | 17 21951 | 0xc4 DHT | 418 22371 | 0xda SOS | 12 $ exiv2 -pa -g Image jpg.jpg Warning: XMP toolkit support not compiled in. Warning: Failed to decode XMP metadata. ... Exif.Image.Model Ascii 12 NIKON D5300 ... $ exiv2 -M'set Exif.Image.Model Nikon is a very nice camera' jpg.jpg Warning: XMP toolkit support not compiled in. Warning: Failed to decode XMP metadata. $ exiv2 -pS jpg.jpg STRUCTURE OF JPEG FILE: jpg.jpg address | marker | length | data 2 | 0xd8 SOI 4 | 0xe1 APP1 | 14884 | Exif..II*..................... 14890 | 0xe1 APP1 | 2720 | http://ns.adobe.com/xap/1.0/.< <--- MOVED & PRESERVED 17612 | 0xed APP13 | 110 | Photoshop 3.0.8BIM.......6.... 17724 | 0xe2 APP2 | 4094 | MPF.II*...............0100.... 21820 | 0xdb DQT | 132 21954 | 0xc0 SOF0 | 17 21973 | 0xc4 DHT | 418 22393 | 0xda SOS | 12 $TIFF:
$ exiv2 -pS tif.tif STRUCTURE OF TIFF FILE: tif.tif address | tag | type | count | offset | value 10 | 0x0100 ImageWidth | SHORT | 1 | 2621440 | 40 22 | 0x0101 ImageLength | SHORT | 1 | 30801920 | 470 34 | 0x0102 BitsPerSample | SHORT | 3 | 182 | 46 | 0x0103 Compression | SHORT | 1 | 327680 | 5 58 | 0x0106 PhotometricInterpret | SHORT | 1 | 131072 | 2 70 | 0x0111 StripOffsets | LONG | 1 | 2694 | 0 82 | 0x0112 Orientation | SHORT | 1 | 393216 | 6 94 | 0x0115 SamplesPerPixel | SHORT | 1 | 196608 | 3 106 | 0x0116 RowsPerStrip | SHORT | 1 | 71565312 | 1092 118 | 0x0117 StripByteCounts | LONG | 1 | 5086 | 0 130 | 0x011c PlanarConfiguration | SHORT | 1 | 65536 | 1 142 | 0x013d Predictor | SHORT | 1 | 131072 | 2 154 | 0x0153 SampleFormat | SHORT | 3 | 188 | 166 | 0x02bc XMLPacket | BYTE | 2500 | 194 | <?xpacket begin="..." id="W5M0Mp ... $ exiv2 -M'set Exif.Image.Software exiv2' tif.tif Warning: XMP toolkit support not compiled in. Warning: Failed to decode XMP metadata. $ exiv2 -pS tif.tif STRUCTURE OF TIFF FILE: tif.tif address | tag | type | count | offset | value 10 | 0x0100 ImageWidth | SHORT | 1 | 2621440 | 40 22 | 0x0101 ImageLength | SHORT | 1 | 30801920 | 470 34 | 0x0102 BitsPerSample | SHORT | 3 | 194 | 46 | 0x0103 Compression | SHORT | 1 | 327680 | 5 58 | 0x0106 PhotometricInterpret | SHORT | 1 | 131072 | 2 70 | 0x0111 StripOffsets | LONG | 1 | 2712 | 0 82 | 0x0112 Orientation | SHORT | 1 | 393216 | 6 94 | 0x0115 SamplesPerPixel | SHORT | 1 | 196608 | 3 106 | 0x0116 RowsPerStrip | SHORT | 1 | 71565312 | 1092 118 | 0x0117 StripByteCounts | LONG | 1 | 5086 | 0 130 | 0x011c PlanarConfiguration | SHORT | 1 | 65536 | 1 142 | 0x0131 Software | ASCII | 6 | 200 | exiv2. 154 | 0x013d Predictor | SHORT | 1 | 131072 | 2 166 | 0x0153 SampleFormat | SHORT | 3 | 206 | 178 | 0x02bc XMLPacket | BYTE | 2500 | 212 | <?xp... <--- MOVED & PRESERVEDPNG:
$ exiv2 -pS png.png STRUCTURE OF PNG FILE: png.png address | index | chunk_type | length | data 8 | 0 | IHDR | 13 | 33 | 1 | zTXt | 8769 | Raw profile type exif..x...[r.. 8814 | 2 | zTXt | 270 | Raw profile type iptc..x.=QKn. 9096 | 3 | iTXt | 2524 | XML:com.adobe.xmp.....<?xpacket 11632 | 4 | iCCP | 1404 | icc..x...i8.......af\...w_3... 13048 | 5 | sBIT | 3 | 13063 | 6 | zTXt | 87 | Software..x...A.. ......B....}. 13162 | 7 | IDAT | 8192 | x...Y.$Wv&v.{.{l.T.......[w.=m$ ... 131376 | 22 | IEND | 0 | $ exiv2 -pa -g Image png.png Warning: XMP toolkit support not compiled in. Warning: Failed to decode XMP metadata. ... Exif.Image.Make Ascii 18 NIKON CORPORATION $ exiv2 -M'set Exif.Image.Model Nikon' png.png Warning: XMP toolkit support not compiled in. Warning: Failed to decode XMP metadata. $ exiv2 -pS png.png STRUCTURE OF PNG FILE: png.png address | index | chunk_type | length | data 8 | 0 | IHDR | 13 | 33 | 1 | zTXt | 8773 | Raw profile type exif..x...k... 8818 | 2 | zTXt | 270 | Raw profile type iptc..x.=QKn. 9100 | 3 | iTXt | 2524 | XML:com.adobe.xmp.....<?xpacket <--- MOVED & PRESERVED 11636 | 4 | iCCP | 1404 | icc..x...i8.......af\...w_3... 13052 | 5 | sBIT | 3 | 13067 | 6 | zTXt | 87 | Software..x...A.. ......B....}. 13166 | 7 | IDAT | 8192 | x...Y.$Wv&v.{.{l.T.......[w.=m$ ... 131380 | 22 | IEND | 0 |
Updated by Robin Mills over 6 years ago
- Status changed from Resolved to Closed
- % Done changed from 0 to 100
- Estimated time set to 1.00 h
This matter was incorrectly open for v0.25 and should have been closed (my error). Closing now.
#900. Preserve XMP data in TIFF files when XMPsdk is not build into the library.