OSDN Git Service

EXIF撮影時刻を基準時刻にしてGPX情報を変換する。
authoryuuhayashi <hayashi.yuu@gmail.com>
Thu, 30 Jun 2016 14:27:58 +0000 (23:27 +0900)
committeryuuhayashi <hayashi.yuu@gmail.com>
Thu, 30 Jun 2016 14:27:58 +0000 (23:27 +0900)
AdjustTime.ini
importPicture/src/osm/jp/gpx/AppParameters.java
importPicture/src/osm/jp/gpx/ImportPicture.java
importPicture/src/osm/jp/gpx/matchtime/gui/AdjustTime.java
importPicture/src/osm/jp/gpx/matchtime/gui/ParameterPanelFolder.java

index 04be5eb..f620d49 100644 (file)
@@ -1,9 +1,9 @@
 #by AdjustTime
-#Sun Jun 26 15:08:44 JST 2016
+#Mon Jun 27 00:09:43 JST 2016
 GPX.gpxSplit=ON
-IMG.OUTPUT_FOLDER=/media/yuu/public/osm/GPXs/\u7DBE\u702C\u5E02\u5409\u5CA1_20160103
 GPX.REUSE=ON
+IMG.OUTPUT_FOLDER=/media/yuu/public/osm/GPXs/\u7DBE\u702C\u5E02\u5409\u5CA1_20160103
+GPX.BASETIME=2016-01-03T15\:14\:02
 IMG.SOURCE_FOLDER=/media/yuu/public/osm/GPXs/\u7DBE\u702C\u5E02\u5409\u5CA1_20160103
-GPX.BASETIME=2016-01-03T17\:56\:50
 GPX.noFirstNode=ON
 IMG.BASE_FILE=S2690001.JPG
index e3230f1..438b60a 100644 (file)
@@ -20,9 +20,12 @@ public class AppParameters extends Properties {
        // GPX: 生成されたGPXファイル(ファイル名が'_.gpx'で終わるもの)も対象にする。 {ON | OFF}
        public static String GPX_REUSE = "GPX.REUSE";
        
-       // GPX: 基準時刻 {FILE_UPDATE | EXIF}
+       // GPX: 基準時刻 {FILE_UPDATE | EXIF_TIME}
        public static String GPX_BASETIME = "GPX.BASETIME";
        
+       // GPX: ファイル更新時刻 yyyy:MM:dd HH:mm:ss
+       public static String IMG_TIME = "IMG.TIME";
+       
        // 対象IMGフォルダ:(位置情報を付加したい画像ファイルが格納されているフォルダ)
        public static String IMG_SOURCE_FOLDER = "IMG.SOURCE_FOLDER";
        
index 96cf947..dcc3f62 100644 (file)
@@ -120,9 +120,33 @@ public class ImportPicture extends Thread {
             return;\r
         }\r
 \r
+        obj.params = new AppParameters();\r
+\r
+        // 基準時刻(ファイル更新日時 | EXIF撮影日時)\r
+       obj.exifBase = (obj.params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME") ? true : false);\r
+\r
         // 基準時刻ファイルの「更新日時」を使って時刻合わせを行う。\r
         File baseFile = new File(obj.imgDir, argv[1]);\r
-        jptime = new Date(baseFile.lastModified());\r
+        if (obj.exifBase) {\r
+            ImageMetadata meta = Imaging.getMetadata(baseFile);\r
+            JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;\r
+            if (jpegMetadata == null) {\r
+                System.out.println("'"+ baseFile.getAbsolutePath() +"' にEXIF情報がありません");\r
+                return;\r
+            }\r
+            TiffImageMetadata exif = jpegMetadata.getExif();\r
+            if (exif == null) {\r
+                System.out.println("'"+ baseFile.getAbsolutePath() +"' にEXIF情報がありません");\r
+                return;\r
+            }\r
+               String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0];\r
+               long lastModifyTime = (new SimpleDateFormat("yyyy:MM:dd HH:mm:ss")).parse(dateTimeOriginal).getTime();\r
+               jptime = new Date(lastModifyTime);\r
+        }\r
+        else {\r
+            jptime = new Date(baseFile.lastModified());\r
+        }\r
+\r
         String timeStr = argv[2];\r
         try {\r
             dfjp.setTimeZone(TimeZone.getTimeZone("JST"));\r
@@ -131,6 +155,7 @@ public class ImportPicture extends Thread {
         }\r
         catch (ParseException e) {\r
             System.out.println("'"+ timeStr +"' の書式が違います("+ TIME_FORMAT_STRING +")");\r
+            return;\r
         }\r
 \r
         // \r
@@ -144,7 +169,6 @@ public class ImportPicture extends Thread {
         }\r
 \r
         // その他のパラメータを読み取る\r
-        obj.params = new AppParameters();\r
        String paramStr = obj.params.getProperty(AppParameters.GPX_GPXSPLIT);\r
        if ((paramStr != null) && (paramStr.toUpperCase().equals("ON"))) {\r
                obj.param_GpxSplit = true;\r
@@ -194,8 +218,6 @@ public class ImportPicture extends Thread {
             obj.gpxFiles.add(obj.gpxDir);            \r
         }\r
         \r
-       obj.exifBase = (obj.params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME") ? true : false);\r
-       \r
         System.out.println(" - param: number of gpxFiles = '"+ obj.gpxFiles.size() +"'");\r
         System.out.println(" - param: imgDir = '"+ obj.imgDir.getAbsolutePath() +"'");\r
         System.out.println(" - param: outDir = '"+ (obj.outDir == null ? "" : obj.outDir.getAbsolutePath()) +"'");\r
@@ -203,6 +225,7 @@ public class ImportPicture extends Thread {
         System.out.println(" - param: "+ AppParameters.GPX_NO_FIRST_NODE +"="+ obj.param_GpxNoFirstNode);        \r
         System.out.println(" - param: "+ AppParameters.GPX_REUSE +"="+ obj.param_GpxReuse);        \r
         System.out.println(" - param: "+ AppParameters.GPX_BASETIME +"="+ obj.params.getProperty(AppParameters.GPX_BASETIME) );\r
+        System.out.println(" - param: EXIF convert = '"+ String.valueOf(obj.exif) +"'");\r
         \r
         obj.start();\r
         try {\r
@@ -407,6 +430,23 @@ public class ImportPicture extends Thread {
             }\r
             \r
             Date itime = new Date(image.lastModified());\r
+            if (this.exifBase) {\r
+                ImageMetadata meta = Imaging.getMetadata(image);\r
+                JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;\r
+                if (jpegMetadata == null) {\r
+                    System.out.println("'"+ image.getAbsolutePath() +"' にEXIF情報がありません");\r
+                    continue;\r
+                }\r
+                TiffImageMetadata exif = jpegMetadata.getExif();\r
+                if (exif == null) {\r
+                    System.out.println("'"+ image.getAbsolutePath() +"' にEXIF情報がありません");\r
+                    continue;\r
+                }\r
+               String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0];\r
+               long lastModifyTime = (new SimpleDateFormat("yyyy:MM:dd HH:mm:ss")).parse(dateTimeOriginal).getTime();\r
+               itime = new Date(lastModifyTime);\r
+            }\r
+\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
index dbf4f3c..12d1a04 100644 (file)
@@ -406,8 +406,6 @@ public class AdjustTime extends JFrame
        if (exifBase.isSelected()) {
                try {
                ImageMetadata meta = Imaging.getMetadata(timeFile);
-               arg3_basetiome.argField.setText("imageView_Action : 412");
-
                 JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;
                 if (jpegMetadata != null) {
                     TiffImageMetadata exif = jpegMetadata.getExif();
@@ -542,9 +540,15 @@ public class AdjustTime extends JFrame
         this.params.setProperty(AppParameters.GPX_NO_FIRST_NODE, (noFirstNode.isSelected() ? "ON" : "OFF"));
         this.params.setProperty(AppParameters.GPX_REUSE, (gpxReuse.isSelected() ? "ON" : "OFF"));
         this.params.setProperty(AppParameters.GPX_SOURCE_FOLDER, arg4_gpxFolder.getText());
+        if (exifBase.isSelected()) {
+            this.params.setProperty(AppParameters.GPX_BASETIME, "EXIF_TIME");
+        }
+        else {
+            this.params.setProperty(AppParameters.GPX_BASETIME, "FILE_UPDATE");
+        }
         this.params.setProperty(AppParameters.IMG_SOURCE_FOLDER, arg1_srcFolder.getText());
         this.params.setProperty(AppParameters.IMG_BASE_FILE, arg2_baseTimeImg.getText());
-        this.params.setProperty(AppParameters.GPX_BASETIME, arg3_basetiome.getText());
+        this.params.setProperty(AppParameters.IMG_TIME, arg3_basetiome.getText());
         this.params.setProperty(AppParameters.IMG_OUTPUT_FOLDER, arg4_gpxFolder.getText());
         try {
             this.params.store();
index 9b243fe..208a928 100644 (file)
@@ -17,16 +17,6 @@ public class ParameterPanelFolder extends ParameterPanel implements ActionListen
 
         //Create a file chooser
                this.chooser = chooser;
-               File sdir = new File(text);
-               System.out.println("sdir="+ sdir.getAbsolutePath());
-               if (sdir.exists()) {
-               fc = new JFileChooser(sdir);
-               }
-               else {
-               fc = new JFileChooser();
-               }
-               
-               fc.setFileSelectionMode(chooser);
 
         openButton = new JButton("選択...", AdjustTime.createImageIcon("images/Open16.gif"));
         openButton.addActionListener(this);
@@ -44,11 +34,20 @@ public class ParameterPanelFolder extends ParameterPanel implements ActionListen
        
     public void actionPerformed(ActionEvent e) {
                if (e.getSource() == openButton){
-                       fc = new JFileChooser(new File(this.argField.getText()));
-                       int returnVal = fc.showOpenDialog(ParameterPanelFolder.this);
+                       System.out.println("ParameterPanelFolder.actionPerformed(openButton)");
+                       File sdir = new File(this.argField.getText());
+                       if (sdir.exists()) {
+                       this.fc = new JFileChooser(sdir);
+                       }
+                       else {
+                       this.fc = new JFileChooser();
+                       }
+                       this.fc.setFileSelectionMode(this.chooser);
+                       
+                       int returnVal = this.fc.showOpenDialog(ParameterPanelFolder.this);
                        
                        if (returnVal == JFileChooser.APPROVE_OPTION) {
-                           File file = fc.getSelectedFile();
+                           File file = this.fc.getSelectedFile();
                            this.argField.setText(file.getAbsolutePath());
                        }
                }