Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Schon jemand GPS Koordinaten beim Upload ausgelesen?
Hallo zusammen,
hat es schon jemand geschaft die GPS Daten aus einem hochgeladenen Bild zu extrahieren?
Habe eine jar eingebunden, die eine Klasse enthält, die dazu in der Lage sein sollte (javaxt.io.Image), aber wenn ich ihr das File übergebe, welches von Wahlzeit für das Foto erzeugt wird, gibt sie mir immer nur leere Daten zurück.
Weiß jemand wo man die hochgeladenen Bilder im Filesystem finden kann damit ich nachschauen kann ob die Bilder mit korrekten Metadaten abgelegt wurden?
Vielen Dank
Gruß Georg
Ich werde es vermutlich so lösen, dass man den Ort manuell eingeben kann.
Hatte ich mir auch angesehen aber nach kurzem Blick auf den Code für die HTML generierung und ich hatte keine Lust mehr ![]()
Also ich kenne eure Anwendung zwar nicht, aber habe mal eine Library verwendet, um Metadaten und insbesondere GPS Daten aus jpg Bilden auszulesen. Früher hieß sie Apache Commons Sanselan, heute Apache Commons Imaging.
Beispiel (Quelle):
// get all metadata stored in EXIF format (ie. from JPEG or TIFF).
final IImageMetadata metadata = Imaging.getMetadata(file);
if (metadata instanceof JpegImageMetadata) {
final JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
// Jpeg EXIF metadata is stored in a TIFF-based directory structure
// and is identified with TIFF tags.
// Here we look for the "x resolution" tag, but
// we could just as easily search for any other tag.
//
// see the TiffConstants file for a list of TIFF tags.
// print out various interesting EXIF tags.
// simple interface to GPS data
final TiffImageMetadata exifMetadata = jpegMetadata.getExif();
if (null != exifMetadata) {
final TiffImageMetadata.GPSInfo gpsInfo = exifMetadata.getGPS();
if (null != gpsInfo) {
final String gpsDescription = gpsInfo.toString();
final double longitude = gpsInfo.getLongitudeAsDegreesEast();
final double latitude = gpsInfo.getLatitudeAsDegreesNorth();
System.out.println(" " + "GPS Description: " + gpsDescription);
System.out.println(" " + "GPS Longitude (Degrees East): " + longitude);
System.out.println(" " + "GPS Latitude (Degrees North): " + latitude);
}
}
// more specific example of how to manually access GPS values
final TiffField gpsLatitudeRefField = jpegMetadata.findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LATITUDE_REF);
final TiffField gpsLatitudeField = jpegMetadata.findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LATITUDE);
final TiffField gpsLongitudeRefField = jpegMetadata.findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF);
final TiffField gpsLongitudeField = jpegMetadata.findEXIFValueWithExactMatch(GpsTagConstants.GPS_TAG_GPS_LONGITUDE);
if (gpsLatitudeRefField != null && gpsLatitudeField != null && gpsLongitudeRefField != null && gpsLongitudeField != null) {
// all of these values are strings.
final String gpsLatitudeRef = (String) gpsLatitudeRefField.getValue();
final RationalNumber gpsLatitude[] = (RationalNumber[]) (gpsLatitudeField.getValue());
final String gpsLongitudeRef = (String) gpsLongitudeRefField.getValue();
final RationalNumber gpsLongitude[] = (RationalNumber[]) gpsLongitudeField .getValue();
final RationalNumber gpsLatitudeDegrees = gpsLatitude[0];
final RationalNumber gpsLatitudeMinutes = gpsLatitude[1];
final RationalNumber gpsLatitudeSeconds = gpsLatitude[2];
final RationalNumber gpsLongitudeDegrees = gpsLongitude[0];
final RationalNumber gpsLongitudeMinutes = gpsLongitude[1];
final RationalNumber gpsLongitudeSeconds = gpsLongitude[2];
// This will format the gps info like so:
// gpsLatitude: 8 degrees, 40 minutes, 42.2 seconds S
// gpsLongitude: 115 degrees, 26 minutes, 21.8 seconds E
System.out.println(" " + "GPS Latitude: "
+ gpsLatitudeDegrees.toDisplayString() + " degrees, "
+ gpsLatitudeMinutes.toDisplayString() + " minutes, "
+ gpsLatitudeSeconds.toDisplayString() + " seconds "
+ gpsLatitudeRef);
System.out.println(" " + "GPS Longitude: "
+ gpsLongitudeDegrees.toDisplayString() + " degrees, "
+ gpsLongitudeMinutes.toDisplayString() + " minutes, "
+ gpsLongitudeSeconds.toDisplayString() + " seconds "
+ gpsLongitudeRef);
}
}
Bisher hab ich es auch eher manuell gelöst dass die Leute ihre Bilder editieren können mit gps. Mit der Bibliothek ist auch eine feine Sache wenn die Bilder halt schon GPS eingepflegt haben.
Ein großes Plus von der Apache Commons Imaging-Library ist das Schreiben von Metadaten, was die meisten anderen Libraries nicht können. Wenn ein Bild ohne Metadaten hochgeladen wird, der Benutzer diese aber manuell eingegeben hat, könntet ihr die Eingaben auch gleich in die Metadaten des Bilds übernehmen.