私の友人は Struts (Java) を使用しており、JPEG 画像の GeoLocation を見つけようとしています。
Javaコードをどこで読むべきか、または実装する方法がわかりません。
画像を jpeg 形式で取得し、ウェブサイトの Google マップに表示したいと考えています。
これらの情報をExifタグからGoogleマップに渡して、マップ上で場所を確認できるようにするにはどうすればよいですか
私の友人は Struts (Java) を使用しており、JPEG 画像の GeoLocation を見つけようとしています。
Javaコードをどこで読むべきか、または実装する方法がわかりません。
画像を jpeg 形式で取得し、ウェブサイトの Google マップに表示したいと考えています。
これらの情報をExifタグからGoogleマップに渡して、マップ上で場所を確認できるようにするにはどうすればよいですか
あなたの質問には2つの部分があります
これは、最初の部分について詳しく説明します
イメージ メタの読み取りは、 apache commons-imaging ライブラリにより大幅に簡素化および合理化されました。
/**
* Reference : https://github.com/apache/commons-imaging/blob/master/src/test/java/org/apache/commons/imaging/examples/MetadataExample.java
*/
public static void readImageMeta(final File imgFile) throws ImageReadException, IOException {
/** get all metadata stored in EXIF format (ie. from JPEG or TIFF). **/
final ImageMetadata metadata = Imaging.getMetadata(imgFile);
System.out.println(metadata);
System.out.println("--------------------------------------------------------------------------------");
/** Get specific meta data information by drilling down the meta **/
if (metadata instanceof JpegImageMetadata) {
JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata;
printTagValue(jpegMetadata, GpsTagConstants.GPS_TAG_GPS_LATITUDE_REF);
printTagValue(jpegMetadata, GpsTagConstants.GPS_TAG_GPS_LATITUDE);
printTagValue(jpegMetadata, GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF);
printTagValue(jpegMetadata, GpsTagConstants.GPS_TAG_GPS_LONGITUDE);
// 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);
}
}
}
private static void printTagValue(final JpegImageMetadata jpegMetadata, TagInfo tagInfo) {
final TiffField field = jpegMetadata.findEXIFValueWithExactMatch(tagInfo);
if (field == null) {
System.out.println(tagInfo.name + ": " + "Not Found.");
} else {
System.out.println(tagInfo.name + ": " + field.getValueDescription());
}
}
public static void main(String[] args) throws IOException, ImageReadException {
File sourceFile = new File("/Users/vivek/myimage.jpg");
readImageMeta(sourceFile);
}
上記のコードは、この出力を提供します
Exif metadata:
Root:
ImageWidth: 3024
ImageLength: 4032
BitsPerSample: 8, 8, 8
PhotometricInterpretation: 2
Make: 'Apple'
Model: 'iPhone 6s'
Orientation: 1
SamplesPerPixel: 3
XResolution: 72
YResolution: 72
ResolutionUnit: 2
Software: 'Adobe Photoshop CC 2015 (Macintosh)'
DateTime: '2016:05:17 16:55:55'
YCbCrPositioning: 1
ExifOffset: 300
GPSInfo: 868
Exif:
ExposureTime: 1/100 (0.01)
FNumber: 11/5 (2.2)
ExposureProgram: 2
PhotographicSensitivity: 40
ExifVersion: 48, 50, 50, 49
DateTimeOriginal: '2016:05:08 18:03:57'
DateTimeDigitized: '2016:05:08 18:03:57'
ComponentsConfiguration: 1, 2, 3, 0
ShutterSpeedValue: 35113/5284 (6.645)
ApertureValue: 7983/3509 (2.275)
BrightnessValue: 13026/2395 (5.439)
ExposureCompensation: 0
MeteringMode: 5
Flash: 16
FocalLength: 83/20 (4.15)
SubjectArea: 618, 1555, 310, 311
SubSecTimeOriginal: '523'
SubSecTimeDigitized: '523'
FlashpixVersion: 48, 49, 48, 48
ColorSpace: 1
ExifImageWidth: 3024
ExifImageLength: 4032
SensingMethod: 2
SceneType: 1
CustomRendered: 4
ExposureMode: 0
WhiteBalance: 0
FocalLengthIn35mmFormat: 29
SceneCaptureType: 0
LensSpecification: 83/20 (4.15), 83/20 (4.15), 11/5 (2.2), 11/5 (2.2)
LensMake: 'Apple'
LensModel: 'iPhone 6s back camera 4.15mm f/2.2'
Gps:
GPSLatitudeRef: 'N'
GPSLatitude: 13, 21, 3305/100 (33.05)
GPSLongitudeRef: 'E'
GPSLongitude: 75, 33, 2034/100 (20.34)
GPSAltitudeRef: 0
GPSAltitude: 83651/95 (880.537)
GPSTimeStamp: 12, 33, 57
GPSSpeedRef: 'K'
GPSSpeed: 21/100 (0.21)
GPSImgDirectionRef: 'T'
GPSImgDirection: 1654/31 (53.355)
GPSDestBearingRef: 'T'
GPSDestBearing: 1654/31 (53.355)
GPSDateStamp: '2016:05:08'
Unknown Tag (0x1f): 5
Sub: (jpegImageData)
Compression: 6
XResolution: 72
YResolution: 72
ResolutionUnit: 2
JpgFromRawStart: 1274
JpgFromRawLength: 8211
Photoshop (IPTC) metadata:
Date Created: 20160508
Time Created: 180357+0000
--------------------------------------------------------------------------------
GPSLatitudeRef: 'N'
GPSLatitude: 13, 21, 3305/100 (33.05)
GPSLongitudeRef: 'E'
GPSLongitude: 75, 33, 2034/100 (20.34)
GPS Description: [GPS. Latitude: 13 degrees, 21 minutes, 33.05 seconds N, Longitude: 75 degrees, 33 minutes, 20.34 seconds E]
GPS Longitude (Degrees East): 75.55565
GPS Latitude (Degrees North): 13.359180555555556
GPS Latitude: 13 degrees, 21 minutes, 33.05 seconds N
GPS Longitude: 75 degrees, 33 minutes, 20.34 seconds E
Fore More ライブラリのドキュメントはこちら
Maven Repo Link hereを参照してください。
注 : 現時点ではアルファ リリースですが、信頼できる apache :D です。
乾杯!