Changeset 30803 in osm for applications
- Timestamp:
- 2014-11-16T00:01:37+01:00 (10 years ago)
- Location:
- applications/editors/josm/plugins/photo_geotagging/src/org
- Files:
-
- 1 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/photo_geotagging/src/org/apache
- Property svn:externals deleted
-
applications/editors/josm/plugins/photo_geotagging/src/org/apache/commons
- Property svn:externals set to
-
applications/editors/josm/plugins/photo_geotagging/src/org/openstreetmap/josm/plugins/photo_geotagging/ExifGPSTagger.java
r30738 r30803 13 13 import java.util.TimeZone; 14 14 15 import org.apache.sanselan.ImageReadException; 16 import org.apache.sanselan.ImageWriteException; 17 import org.apache.sanselan.Sanselan; 18 import org.apache.sanselan.common.IImageMetadata; 19 import org.apache.sanselan.formats.jpeg.JpegImageMetadata; 20 import org.apache.sanselan.formats.jpeg.exifRewrite.ExifRewriter; 21 import org.apache.sanselan.formats.tiff.TiffImageMetadata; 22 import org.apache.sanselan.formats.tiff.constants.GPSTagConstants; 23 import org.apache.sanselan.formats.tiff.fieldtypes.FieldType; 24 import org.apache.sanselan.formats.tiff.write.TiffOutputDirectory; 25 import org.apache.sanselan.formats.tiff.write.TiffOutputField; 26 import org.apache.sanselan.formats.tiff.write.TiffOutputSet; 15 import org.apache.commons.imaging.ImageReadException; 16 import org.apache.commons.imaging.ImageWriteException; 17 import org.apache.commons.imaging.Imaging; 18 import org.apache.commons.imaging.common.IImageMetadata; 19 import org.apache.commons.imaging.common.RationalNumber; 20 import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata; 21 import org.apache.commons.imaging.formats.jpeg.exif.ExifRewriter; 22 import org.apache.commons.imaging.formats.tiff.TiffImageMetadata; 23 import org.apache.commons.imaging.formats.tiff.constants.GpsTagConstants; 24 import org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory; 25 import org.apache.commons.imaging.formats.tiff.write.TiffOutputSet; 27 26 28 27 public class ExifGPSTagger { … … 52 51 TiffOutputSet outputSet = null; 53 52 54 IImageMetadata metadata = Sanselan.getMetadata(jpegImageFile);53 IImageMetadata metadata = Imaging.getMetadata(jpegImageFile); 55 54 JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata; 56 55 if (null != jpegMetadata) { … … 66 65 } 67 66 67 TiffOutputDirectory gpsDirectory = outputSet.getOrCreateGPSDirectory(); 68 gpsDirectory.removeField(GpsTagConstants.GPS_TAG_GPS_VERSION_ID); 69 gpsDirectory.add(GpsTagConstants.GPS_TAG_GPS_VERSION_ID, (byte)2, (byte)3, (byte)0, (byte)0); 70 68 71 Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC")); 69 70 72 calendar.setTimeInMillis(gpsTime); 71 73 … … 87 89 //System.err.println("date: "+dateStamp+" h/m/s: "+hour+"/"+minute+"/"+second); 88 90 89 Double[] timeStamp = {new Double(hour), new Double(minute), new Double(second)};90 TiffOutputField gpsTimeStamp = TiffOutputField.create(91 GPSTagConstants.GPS_TAG_GPS_TIME_STAMP,92 outputSet.byteOrder, timeStamp);93 TiffOutputDirectory exifDirectory = outputSet.getOrCreateGPSDirectory();94 91 // make sure to remove old value if present (this method will 95 92 // not fail if the tag does not exist). 96 exifDirectory.removeField(GPSTagConstants.GPS_TAG_GPS_TIME_STAMP); 97 exifDirectory.add(gpsTimeStamp); 93 gpsDirectory.removeField(GpsTagConstants.GPS_TAG_GPS_TIME_STAMP); 94 gpsDirectory.add(GpsTagConstants.GPS_TAG_GPS_TIME_STAMP, 95 RationalNumber.valueOf(hour), 96 RationalNumber.valueOf(minute), 97 RationalNumber.valueOf(second)); 98 98 99 TiffOutputField gpsDateStamp = SanselanFixes.create(100 GPSTagConstants.GPS_TAG_GPS_DATE_STAMP,101 outputSet.byteOrder, dateStamp);102 99 // make sure to remove old value if present (this method will 103 100 // not fail if the tag does not exist). 104 exifDirectory.removeField(GPSTagConstants.GPS_TAG_GPS_DATE_STAMP);105 exifDirectory.add(gpsDateStamp);101 gpsDirectory.removeField(GpsTagConstants.GPS_TAG_GPS_DATE_STAMP); 102 gpsDirectory.add(GpsTagConstants.GPS_TAG_GPS_DATE_STAMP, dateStamp); 106 103 107 SanselanFixes.setGPSInDegrees(outputSet,lon, lat);104 outputSet.setGPSInDegrees(lon, lat); 108 105 109 106 if (ele != null) { 110 107 byte eleRef = ele >= 0 ? (byte) 0 : (byte) 1; 111 TiffOutputField gpsAltitudeRef = new TiffOutputField( 112 GPSTagConstants.GPS_TAG_GPS_ALTITUDE_REF, 113 FieldType.FIELD_TYPE_BYTE, 1, new byte[] { eleRef }); 114 exifDirectory.removeField(GPSTagConstants.GPS_TAG_GPS_ALTITUDE_REF); 115 exifDirectory.add(gpsAltitudeRef); 108 gpsDirectory.removeField(GpsTagConstants.GPS_TAG_GPS_ALTITUDE_REF); 109 gpsDirectory.add(GpsTagConstants.GPS_TAG_GPS_ALTITUDE_REF, eleRef); 116 110 117 Number[] val = new Number[] { Math.abs(ele) }; 118 byte[] bytes = FieldType.FIELD_TYPE_RATIONAL.writeData(val, outputSet.byteOrder); 119 TiffOutputField gpsAltitude = new TiffOutputField( 120 GPSTagConstants.GPS_TAG_GPS_ALTITUDE, 121 FieldType.FIELD_TYPE_RATIONAL, 1, bytes); 122 exifDirectory.removeField(GPSTagConstants.GPS_TAG_GPS_ALTITUDE); 123 exifDirectory.add(gpsAltitude); 111 gpsDirectory.removeField(GpsTagConstants.GPS_TAG_GPS_ALTITUDE); 112 gpsDirectory.add(GpsTagConstants.GPS_TAG_GPS_ALTITUDE, RationalNumber.valueOf(Math.abs(ele))); 124 113 } 125 114 try (BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(dst))) {
Note:
See TracChangeset
for help on using the changeset viewer.