Copy link to clipboard
Copied
I have found 10 year old examples on the net showing the coordinates included in the returned query, but when I try it on my CF 2021 server, those coordinates are not there, not even referenced in the cfdump. Has this function changed over time?
Kevin and I spoke offline. He's clarified that what he means is that he now realizes the problem is indeed that his images don't HAVE the GPS data, and when he says "so this solution won't work for me", he means he won't be able to do the sort of processing of images he'd hoped to do. It's clear now that his problem was not the inability of CF or this function to work to GET any GPS data, which is how it originally read (to me, at least).
And perhaps someone will get value from all the other i
...Copy link to clipboard
Copied
I'm pretty sure the problem is simply that the image you're trying just has no exifdata. 🙂 You don't offer an example, but I do below. If you try it with the FIRST image which DOES have exif metadata, the first dump will show it; otherwise, the struct will be empty, as you saw. Just swap the comments in front of the imageread to see the difference.
<cfscript>
//imgObj = imageRead("https://github.com/ianare/exif-samples/blob/master/jpg/Canon_40D.jpg?raw=true");
// the above image will show exifmetadata
imgObj = imageRead("https://bennadel-cdn.com/images/header/photos/carol_loffelmann_vicky_ryder.jpg");
// the above image will NOT show exifmetadata
writeDump(imgObj.getEXIFMetadata());
writeDump(imgObj.getMetadata());
writedump(imgobj);
//those can also be written as:
//writeDump(imagegetEXIFMetadata(imgObj));
//writeDump(imagegetMetadata(imgObj));
</cfscript>
BTW, you may have found somehow that something else you used showed that there WAS metadata, and you can see in my second two dumps above of either getmetadata or the image alone (and done either of the two ways I offer), even the second image has that sort of "metadata", just not EXIF metadata.
And if you may want confirm this other than with CF, there are online tools that will show exif (and general) metadata such as https://jimpl.com , just like you can also right-click an image in Windows and choose properties to see image data in details. All those also will also show only metadata and NOT exif metadata is there is none. Indeed, you can use either of those to check any image of your own that you may have been working with.
Let us know how it goes.
Copy link to clipboard
Copied
@klemke , note that, first and foremost, the image has to have had GPS location metadata added.
Copy link to clipboard
Copied
Klemke, how did things go? Especially if you considered what I'd offered.
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Kevin, no. The problem is not that CF fails to show GPS data. It DOES show that GPS data, if the image has it.
Let me clarify first that I didn't realize you were asking about GPS data. Yes, I seee it now in the title, but as you could tell from my first reply, my focus was on the Exif data in general, and I thought you were saying you saw NONE at all (others have reported it, and I demonstrated it). That's why my code and example image links demonstrated how that WOULD work if the image DID have exif metadata.
So now you have helped me see that it was gps data specifically. But I will ask you: are you saying you have am image that you know DOES have GPS data in its exif metadata? If so, then the code I offered should show it. As important, so would that jimpl.com site.
I press these points, because I just spent a couple minutes finding an image that DOES purpose to have GPS data, and the jimpl site DOES show that GPS data, and finally the code I shared above DOES show CF having it in the dump of the getexifmetadata, for that image. Here first is the image URL:
https://github.com/ianare/exif-samples/blob/master/jpg/gps/DSCN0042.jpg?raw=true
And second, here is the relevant portion of the cfdump of the getexifmetadata function's result showing that gps data:
GPS Altitude Ref | Sea level |
GPS Date Stamp | 2008:10:23 |
GPS Img Direction Ref | Unknown () |
GPS Latitude | 43° 27' 52.04" |
GPS Latitude Ref | N |
GPS Longitude | 11° 52' 53.32" |
GPS Longitude Ref | E |
GPS Map Datum | WGS-84 |
GPS Satellites | 04 |
GPS Time-Stamp | 14:57:41.37 UTC |
So I'm curious: do you HAVE an image that you feel DOES have exif gps data? Did you try that image in that jimpl.com site and does THAT SITE confirm there's exif gps data. Again, you can see what it would look like on that site with the image link I shared above. And you can then drop it in as the variable value of the code I share above. It should.
If it does not, please elaborate. As BKBK said, an image has to HAVE the gps data for it to be shown. More than that, as my first demo's first commented image shows, an image can have exif data but NOT have GPS info at all. It sure seems whatever is amiss for you, it's not about CF but about the image.
Copy link to clipboard
Copied
Copy link to clipboard
Copied
This may already have been covered in the thread. If so, I apologize.
If an image has GPS coordinates, they'll be in the EXIF metadata just like anything else that isn't required to display the image. In my personal experience, most images from modern DSLR and mirrorless cameras don't have GPS data because those cameras don't have embedded GPS hardware. You have to add extra hardware for GPS support. Phones do automatically add GPS coordinates to image metadata, because they do have that hardware built in. So, use something like CFTRY/CFCATCH to test for it before you try to use it.
Dave Watts, Eidolon LLC
Copy link to clipboard
Copied
Kevin, you say "Since I may receive images without gps data, my solution needs to account for that and I cannot use this approach".
Do you mean simply that you can't use this function to detect whether gps data is available? That's not so. You absolutely can.
Just test for whether those struct keys exist in the result, using structKeyExists(imgobj. GetExifMetadata(),"GPS Latitude"). If it's true, there's gps data.
Or is there still some reason you feel this won't help? Please help us help you.
Copy link to clipboard
Copied
Kevin and I spoke offline. He's clarified that what he means is that he now realizes the problem is indeed that his images don't HAVE the GPS data, and when he says "so this solution won't work for me", he means he won't be able to do the sort of processing of images he'd hoped to do. It's clear now that his problem was not the inability of CF or this function to work to GET any GPS data, which is how it originally read (to me, at least).
And perhaps someone will get value from all the other info shared in the thread, from all of us. But it seems otherwise we can regard this as case closed.
Copy link to clipboard
Copied
Do you have the ability to drop down to the command line using CFExecute? If so, I recommend using Exiv2. Here's a UDF that I've been using for 6 years now. Enjoy!
https://dev.to/gamesover/use-exiv2-to-extract-gps-data-from-images-using-cfml-3maa
NOTE: We used this with a mystery shopping company's agents to ensure that photos contained GPS data and then used the metadata to compare and ensure that single photos weren't being used multiple times.
Please note your mileage may vary as not all images have GPS data.