File[] files = dir.listFiles();\r
Arrays.sort(files, new FileSort());\r
for (File image : files) {\r
+ System.out.print(String.format("%12s|", image.getName()));\r
if (image.isDirectory()) {\r
ret = proc(image, delta, gpxStartTime, gpxEndTime, map, exifWrite, gpx);\r
+ continue;\r
+ }\r
+ \r
+ String imageName = image.getName();\r
+ if (!checkFile(imageName)) {\r
+ System.out.println(String.format("%20s ", "it is not image file."));\r
+ continue;\r
+ }\r
+ \r
+ Date itime = new Date(image.lastModified());\r
+ Date uktime = new Date(itime.getTime() + delta);\r
+ System.out.print(String.format("%20s ", dfjp.format(itime)));\r
+ System.out.print(String.format("%20s|", dfjp.format(uktime)));\r
+ if ((uktime.getTime() < gpxStartTime) || (uktime.getTime() > gpxEndTime)) {\r
+ System.out.println(String.format("%20s ", "out of time."));\r
+ continue;\r
}\r
- else {\r
- String imageName = image.getName();\r
- if (checkFile(imageName)) {\r
- Date itime = new Date(image.lastModified());\r
- Date uktime = new Date(itime.getTime() + delta);\r
- if ((uktime.getTime() >= gpxStartTime) && (uktime.getTime() <= gpxEndTime)) {\r
- Element trkpt = trkpt(map, uktime);\r
- if (trkpt != null) {\r
- Element wpt = createWptTag(image, uktime.getTime(), trkpt);\r
- String latStr = wpt.getAttribute("lat");\r
- String lonStr = wpt.getAttribute("lon");\r
- double latitude = Double.parseDouble(latStr);\r
- double longitude = Double.parseDouble(lonStr);\r
- \r
- String eleStr = "-";\r
- String magvarStr = "-";\r
- NodeList nodes = wpt.getChildNodes(); // 子ノードを取得\r
- for (int i4 = 0; i4 < nodes.getLength(); i4++) {\r
- Node node = nodes.item(i4);\r
- if (node != null) {\r
- switch (node.getNodeName()) {\r
- case "ele":\r
- eleStr = node.getFirstChild().getNodeValue();\r
- break;\r
- case "magvar":\r
- magvarStr = node.getFirstChild().getNodeValue();\r
- break;\r
- }\r
- }\r
- }\r
\r
- System.out.print(String.format("%12s|", image.getName()));\r
- System.out.print(String.format("%20s ", dfjp.format(itime)));\r
- System.out.print(String.format("%20s|", dfjp.format(uktime)));\r
- System.out.print(String.format("%12s %12s|", latStr, lonStr));\r
- System.out.println(String.format("%8s|%6s|", eleStr, magvarStr));\r
- ret = true;\r
-\r
- if (exifWrite) {\r
- TiffOutputSet outputSet = null;\r
- FileOutputStream fos = null;\r
-\r
- ImageMetadata meta = Imaging.getMetadata(image);\r
- JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;\r
- if (jpegMetadata != null) {\r
- TiffImageMetadata exif = jpegMetadata.getExif();\r
- if (exif != null) {\r
- outputSet = exif.getOutputSet();\r
- }\r
- }\r
+ Element trkpt = trkpt(map, uktime);\r
+ if (trkpt == null) {\r
+ System.out.println(String.format("%20s ", "Out of GPX logging time."));\r
+ continue;\r
+ }\r
+ \r
+ Element wpt = createWptTag(image, uktime.getTime(), trkpt);\r
+ String latStr = wpt.getAttribute("lat");\r
+ String lonStr = wpt.getAttribute("lon");\r
+ double latitude = Double.parseDouble(latStr);\r
+ double longitude = Double.parseDouble(lonStr);\r
+ \r
+ String eleStr = "-";\r
+ String magvarStr = "-";\r
+ NodeList nodes = wpt.getChildNodes(); // 子ノードを取得\r
+ for (int i4 = 0; i4 < nodes.getLength(); i4++) {\r
+ Node node = nodes.item(i4);\r
+ if (node != null) {\r
+ switch (node.getNodeName()) {\r
+ case "ele":\r
+ eleStr = node.getFirstChild().getNodeValue();\r
+ break;\r
+ case "magvar":\r
+ magvarStr = node.getFirstChild().getNodeValue();\r
+ break;\r
+ }\r
+ }\r
+ }\r
\r
- if (outputSet == null) {\r
- System.out.println("added : new tiff output set");\r
- outputSet = new TiffOutputSet();\r
- }\r
+ System.out.print(String.format("%12s %12s|", latStr, lonStr));\r
+ System.out.println(String.format("%8s|%6s|", eleStr, magvarStr));\r
+ ret = true;\r
\r
- //---- EXIF_TAG_DATE_TIME_ORIGINAL / 「撮影日時/オリジナル画像の生成日時」----\r
- TiffOutputDirectory exifDir = outputSet.getOrCreateExifDirectory();\r
- {\r
- Calendar cal = GregorianCalendar.getInstance();\r
- cal.setTime(uktime);\r
- exifDir.removeField(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL);\r
- exifDir.add(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL, new SimpleDateFormat("yyyy:MM:dd HH:mm:ss").format(cal.getTime()));\r
- }\r
+ if (exifWrite) {\r
+ TiffOutputSet outputSet = null;\r
+ FileOutputStream fos = null;\r
\r
- //---- EXIF GPS_TIME_STAMP ----\r
- TiffOutputDirectory gpsDir = outputSet.getOrCreateGPSDirectory();\r
- {\r
- Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC"));\r
- cal.setTime(uktime);\r
- final String yearStr = yearFormatter.format(cal.get(Calendar.YEAR));\r
- final String monthStr = monthFormatter.format(cal.get(Calendar.MONTH) + 1);\r
- final String dayStr = dayFormatter.format(cal.get(Calendar.DAY_OF_MONTH));\r
- final String dateStamp = yearStr +":"+ monthStr +":"+ dayStr;\r
-\r
- gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_TIME_STAMP);\r
- gpsDir.add(GpsTagConstants.GPS_TAG_GPS_TIME_STAMP,\r
- RationalNumber.valueOf(cal.get(Calendar.HOUR_OF_DAY)),\r
- RationalNumber.valueOf(cal.get(Calendar.MINUTE)),\r
- RationalNumber.valueOf(cal.get(Calendar.SECOND)));\r
- gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_DATE_STAMP);\r
- gpsDir.add(GpsTagConstants.GPS_TAG_GPS_DATE_STAMP, dateStamp);\r
- }\r
+ ImageMetadata meta = Imaging.getMetadata(image);\r
+ JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;\r
+ if (jpegMetadata != null) {\r
+ TiffImageMetadata exif = jpegMetadata.getExif();\r
+ if (exif != null) {\r
+ outputSet = exif.getOutputSet();\r
+ }\r
+ }\r
\r
- //---- EXIF GPS elevation/ALTITUDE ----\r
- if (eleStr.equals("-") == false) {\r
- final double altitude = Double.parseDouble(eleStr);\r
- gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_ALTITUDE);\r
- gpsDir.add(GpsTagConstants.GPS_TAG_GPS_ALTITUDE, RationalNumber.valueOf(altitude));\r
- }\r
+ if (outputSet == null) {\r
+ System.out.println("added : new tiff output set");\r
+ outputSet = new TiffOutputSet();\r
+ }\r
\r
- //---- EXIF GPS magvar/IMG_DIRECTION ----\r
- if (magvarStr.equals("-") == false) {\r
- final double magvar = Double.parseDouble(magvarStr);\r
- gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION);\r
- gpsDir.add(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION, RationalNumber.valueOf(magvar));\r
- }\r
+ //---- EXIF_TAG_DATE_TIME_ORIGINAL / 「撮影日時/オリジナル画像の生成日時」----\r
+ TiffOutputDirectory exifDir = outputSet.getOrCreateExifDirectory();\r
+ {\r
+ Calendar cal = GregorianCalendar.getInstance();\r
+ cal.setTime(uktime);\r
+ exifDir.removeField(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL);\r
+ exifDir.add(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL, new SimpleDateFormat("yyyy:MM:dd HH:mm:ss").format(cal.getTime()));\r
+ }\r
\r
- //---- EXIF GPS_ ----\r
- final String longitudeRef = (longitude < 0 ? "W" : "E");\r
- longitude = Math.abs(longitude);\r
- final String latitudeRef = (latitude < 0 ? "S" : "N");\r
- latitude = Math.abs(latitude);\r
-\r
- gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF);\r
- gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF, longitudeRef);\r
- gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LATITUDE_REF);\r
- gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LATITUDE_REF, latitudeRef);\r
- {\r
- double value = longitude;\r
- final double longitudeDegrees = (long) value;\r
- value %= 1;\r
- value *= 60.0;\r
- final double longitudeMinutes = (long) value;\r
- value %= 1;\r
- value *= 60.0;\r
- final double longitudeSeconds = value;\r
- gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LONGITUDE);\r
- gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LONGITUDE,\r
- RationalNumber.valueOf(longitudeDegrees),\r
- RationalNumber.valueOf(longitudeMinutes),\r
- RationalNumber.valueOf(longitudeSeconds));\r
- }\r
- {\r
- double value = latitude;\r
- final double latitudeDegrees = (long) value;\r
- value %= 1;\r
- value *= 60.0;\r
- final double latitudeMinutes = (long) value;\r
- value %= 1;\r
- value *= 60.0;\r
- final double latitudeSeconds = value;\r
- gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LATITUDE);\r
- gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LATITUDE,\r
- RationalNumber.valueOf(latitudeDegrees),\r
- RationalNumber.valueOf(latitudeMinutes),\r
- RationalNumber.valueOf(latitudeSeconds));\r
- }\r
+ //---- EXIF GPS_TIME_STAMP ----\r
+ TiffOutputDirectory gpsDir = outputSet.getOrCreateGPSDirectory();\r
+ {\r
+ Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC"));\r
+ cal.setTime(uktime);\r
+ final String yearStr = yearFormatter.format(cal.get(Calendar.YEAR));\r
+ final String monthStr = monthFormatter.format(cal.get(Calendar.MONTH) + 1);\r
+ final String dayStr = dayFormatter.format(cal.get(Calendar.DAY_OF_MONTH));\r
+ final String dateStamp = yearStr +":"+ monthStr +":"+ dayStr;\r
+\r
+ gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_TIME_STAMP);\r
+ gpsDir.add(GpsTagConstants.GPS_TAG_GPS_TIME_STAMP,\r
+ RationalNumber.valueOf(cal.get(Calendar.HOUR_OF_DAY)),\r
+ RationalNumber.valueOf(cal.get(Calendar.MINUTE)),\r
+ RationalNumber.valueOf(cal.get(Calendar.SECOND)));\r
+ gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_DATE_STAMP);\r
+ gpsDir.add(GpsTagConstants.GPS_TAG_GPS_DATE_STAMP, dateStamp);\r
+ }\r
\r
- outDir.mkdir();\r
- ExifRewriter rewriter = new ExifRewriter();\r
- try {\r
- fos = new FileOutputStream(new File(outDir, imageName));\r
- rewriter.updateExifMetadataLossy(image, fos, outputSet);\r
- }\r
- finally {\r
- if (fos != null) {\r
- fos.close();\r
- }\r
- }\r
- }\r
+ //---- EXIF GPS elevation/ALTITUDE ----\r
+ if (eleStr.equals("-") == false) {\r
+ final double altitude = Double.parseDouble(eleStr);\r
+ gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_ALTITUDE);\r
+ gpsDir.add(GpsTagConstants.GPS_TAG_GPS_ALTITUDE, RationalNumber.valueOf(altitude));\r
+ }\r
\r
- Element temp = getCopy(gpx.getOwnerDocument(), wpt);\r
- gpx.appendChild(temp);\r
- }\r
+ //---- EXIF GPS magvar/IMG_DIRECTION ----\r
+ if (magvarStr.equals("-") == false) {\r
+ final double magvar = Double.parseDouble(magvarStr);\r
+ gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION);\r
+ gpsDir.add(GpsTagConstants.GPS_TAG_GPS_IMG_DIRECTION, RationalNumber.valueOf(magvar));\r
+ }\r
+\r
+ //---- EXIF GPS_ ----\r
+ final String longitudeRef = (longitude < 0 ? "W" : "E");\r
+ longitude = Math.abs(longitude);\r
+ final String latitudeRef = (latitude < 0 ? "S" : "N");\r
+ latitude = Math.abs(latitude);\r
+\r
+ gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF);\r
+ gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF, longitudeRef);\r
+ gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LATITUDE_REF);\r
+ gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LATITUDE_REF, latitudeRef);\r
+ {\r
+ double value = longitude;\r
+ final double longitudeDegrees = (long) value;\r
+ value %= 1;\r
+ value *= 60.0;\r
+ final double longitudeMinutes = (long) value;\r
+ value %= 1;\r
+ value *= 60.0;\r
+ final double longitudeSeconds = value;\r
+ gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LONGITUDE);\r
+ gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LONGITUDE,\r
+ RationalNumber.valueOf(longitudeDegrees),\r
+ RationalNumber.valueOf(longitudeMinutes),\r
+ RationalNumber.valueOf(longitudeSeconds));\r
+ }\r
+ {\r
+ double value = latitude;\r
+ final double latitudeDegrees = (long) value;\r
+ value %= 1;\r
+ value *= 60.0;\r
+ final double latitudeMinutes = (long) value;\r
+ value %= 1;\r
+ value *= 60.0;\r
+ final double latitudeSeconds = value;\r
+ gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LATITUDE);\r
+ gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LATITUDE,\r
+ RationalNumber.valueOf(latitudeDegrees),\r
+ RationalNumber.valueOf(latitudeMinutes),\r
+ RationalNumber.valueOf(latitudeSeconds));\r
+ }\r
+\r
+ outDir.mkdir();\r
+ ExifRewriter rewriter = new ExifRewriter();\r
+ try {\r
+ fos = new FileOutputStream(new File(outDir, imageName));\r
+ rewriter.updateExifMetadataLossy(image, fos, outputSet);\r
+ }\r
+ finally {\r
+ if (fos != null) {\r
+ fos.close();\r
}\r
}\r
}\r
+\r
+ Element temp = getCopy(gpx.getOwnerDocument(), wpt);\r
+ gpx.appendChild(temp);\r
}\r
return ret;\r
}\r