GPSAltitude rational64s not preserved during copy tagsFromFile

Started by adelpit, June 27, 2019, 04:06:00 PM

Previous topic - Next topic

adelpit

Hello,

I am trying to copy exif data from a jpg to a tiff.  Everything is mostly working, however I am having issues with the `GPSAltitude`.  It appears the official spec is to encode as a `rational64u`, however, DJI is often writing them as a `rational64s`.  This seems to work ok and exiftool and many other tools seem to handle it ok.  But when I go to copy to this field to the tiff, it gets converted to a `rational64u` and any sign is lost.  If the original value was negative, I would expect this to cause the `GPSAltitudeRef` bit to get flipped during copy to preserve the sign.

Here is my command for copying exif data to the tiff

exiftool -tagsFromFile  source.jpg -all:all -overwrite_original -r destination.tiff

Then checking the gpsaltitude fields:

exiftool -n -gpsaltitude* source.jpg destination.tiff
======== source.jpg
GPS Altitude Ref                : 0
GPS Altitude                    : -133.859
======== destination.tiff
GPS Altitude Ref                : 0
GPS Altitude                    : 133.859
    2 image files read


I can work around this by manually setting the GPSAltitudeRef value to preserve the original sign but I would like to find a cleaner solution.  Given that the GPSAltitude is not a `rational64u` as per the spec, I'm not sure if this is really an exiftool issue.  How do you advise properly handling negative `GPSAltitude` values when copying via tagsFromFile?  The source and destination images are attached. 

Thank you



Phil Harvey

Try this:

exiftool -tagsFromFile  source.jpg -all:all "-gpsaltituderef<gpsaltitude" -overwrite_original -r destination.tiff

The the Notes for the GPSAltitudeRef tag in the GPS tags documentation to see why this works.

- Pil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

adelpit

Thanks for the quick response.  That is exactly my current workaround.  That works when GPSAltitude<0 and GPSAltitudeRef=0.  However, I was thinking that would fail if the GPSAltitude<0 AND GPSAltitudeRef=1.  In this case, I would think it should set GPSAltitudeRef to 0 instead of 1.

Phil Harvey

Ah.  I see.  If the original GPSAltitude is positive then GPSAltitudeRef doesn't get written (it currently requires a leading "+").  OK, try this then:

exiftool -tagsFromFile  source.jpg -all:all -gpsaltituderef=above "-gpsaltituderef<gpsaltitude" -overwrite_original -r destination.tiff

I should maybe change it so writing with any non-negative number sets it to "Above Sea Level".

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

adelpit