From 5adedb1f2e3f6921789429821543853c26a8db8e Mon Sep 17 00:00:00 2001 From: yuuhayashi Date: Thu, 30 Jun 2016 23:27:58 +0900 Subject: [PATCH] =?utf8?q?EXIF=E6=92=AE=E5=BD=B1=E6=99=82=E5=88=BB?= =?utf8?q?=E3=82=92=E5=9F=BA=E6=BA=96=E6=99=82=E5=88=BB=E3=81=AB=E3=81=97?= =?utf8?q?=E3=81=A6GPX=E6=83=85=E5=A0=B1=E3=82=92=E5=A4=89=E6=8F=9B?= =?utf8?q?=E3=81=99=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- AdjustTime.ini | 6 +-- importPicture/src/osm/jp/gpx/AppParameters.java | 5 ++- importPicture/src/osm/jp/gpx/ImportPicture.java | 48 ++++++++++++++++++++-- .../src/osm/jp/gpx/matchtime/gui/AdjustTime.java | 10 +++-- .../jp/gpx/matchtime/gui/ParameterPanelFolder.java | 25 ++++++----- 5 files changed, 70 insertions(+), 24 deletions(-) diff --git a/AdjustTime.ini b/AdjustTime.ini index 04be5eb..f620d49 100644 --- a/AdjustTime.ini +++ b/AdjustTime.ini @@ -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 diff --git a/importPicture/src/osm/jp/gpx/AppParameters.java b/importPicture/src/osm/jp/gpx/AppParameters.java index e3230f1..438b60a 100644 --- a/importPicture/src/osm/jp/gpx/AppParameters.java +++ b/importPicture/src/osm/jp/gpx/AppParameters.java @@ -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"; diff --git a/importPicture/src/osm/jp/gpx/ImportPicture.java b/importPicture/src/osm/jp/gpx/ImportPicture.java index 96cf947..dcc3f62 100644 --- a/importPicture/src/osm/jp/gpx/ImportPicture.java +++ b/importPicture/src/osm/jp/gpx/ImportPicture.java @@ -120,9 +120,33 @@ public class ImportPicture extends Thread { return; } + obj.params = new AppParameters(); + + // 基準時刻(ファイル更新日時 | EXIF撮影日時) + obj.exifBase = (obj.params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME") ? true : false); + // 基準時刻ファイルの「更新日時」を使って時刻合わせを行う。 File baseFile = new File(obj.imgDir, argv[1]); - jptime = new Date(baseFile.lastModified()); + if (obj.exifBase) { + ImageMetadata meta = Imaging.getMetadata(baseFile); + JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta; + if (jpegMetadata == null) { + System.out.println("'"+ baseFile.getAbsolutePath() +"' にEXIF情報がありません"); + return; + } + TiffImageMetadata exif = jpegMetadata.getExif(); + if (exif == null) { + System.out.println("'"+ baseFile.getAbsolutePath() +"' にEXIF情報がありません"); + return; + } + String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0]; + long lastModifyTime = (new SimpleDateFormat("yyyy:MM:dd HH:mm:ss")).parse(dateTimeOriginal).getTime(); + jptime = new Date(lastModifyTime); + } + else { + jptime = new Date(baseFile.lastModified()); + } + String timeStr = argv[2]; try { dfjp.setTimeZone(TimeZone.getTimeZone("JST")); @@ -131,6 +155,7 @@ public class ImportPicture extends Thread { } catch (ParseException e) { System.out.println("'"+ timeStr +"' の書式が違います("+ TIME_FORMAT_STRING +")"); + return; } // @@ -144,7 +169,6 @@ public class ImportPicture extends Thread { } // その他のパラメータを読み取る - obj.params = new AppParameters(); String paramStr = obj.params.getProperty(AppParameters.GPX_GPXSPLIT); if ((paramStr != null) && (paramStr.toUpperCase().equals("ON"))) { obj.param_GpxSplit = true; @@ -194,8 +218,6 @@ public class ImportPicture extends Thread { obj.gpxFiles.add(obj.gpxDir); } - obj.exifBase = (obj.params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME") ? true : false); - System.out.println(" - param: number of gpxFiles = '"+ obj.gpxFiles.size() +"'"); System.out.println(" - param: imgDir = '"+ obj.imgDir.getAbsolutePath() +"'"); System.out.println(" - param: outDir = '"+ (obj.outDir == null ? "" : obj.outDir.getAbsolutePath()) +"'"); @@ -203,6 +225,7 @@ public class ImportPicture extends Thread { System.out.println(" - param: "+ AppParameters.GPX_NO_FIRST_NODE +"="+ obj.param_GpxNoFirstNode); System.out.println(" - param: "+ AppParameters.GPX_REUSE +"="+ obj.param_GpxReuse); System.out.println(" - param: "+ AppParameters.GPX_BASETIME +"="+ obj.params.getProperty(AppParameters.GPX_BASETIME) ); + System.out.println(" - param: EXIF convert = '"+ String.valueOf(obj.exif) +"'"); obj.start(); try { @@ -407,6 +430,23 @@ public class ImportPicture extends Thread { } Date itime = new Date(image.lastModified()); + if (this.exifBase) { + ImageMetadata meta = Imaging.getMetadata(image); + JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta; + if (jpegMetadata == null) { + System.out.println("'"+ image.getAbsolutePath() +"' にEXIF情報がありません"); + continue; + } + TiffImageMetadata exif = jpegMetadata.getExif(); + if (exif == null) { + System.out.println("'"+ image.getAbsolutePath() +"' にEXIF情報がありません"); + continue; + } + String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0]; + long lastModifyTime = (new SimpleDateFormat("yyyy:MM:dd HH:mm:ss")).parse(dateTimeOriginal).getTime(); + itime = new Date(lastModifyTime); + } + Date uktime = new Date(itime.getTime() + delta); System.out.print(String.format("%20s ", dfjp.format(itime))); System.out.print(String.format("%20s|", dfjp.format(uktime))); diff --git a/importPicture/src/osm/jp/gpx/matchtime/gui/AdjustTime.java b/importPicture/src/osm/jp/gpx/matchtime/gui/AdjustTime.java index dbf4f3c..12d1a04 100644 --- a/importPicture/src/osm/jp/gpx/matchtime/gui/AdjustTime.java +++ b/importPicture/src/osm/jp/gpx/matchtime/gui/AdjustTime.java @@ -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(); diff --git a/importPicture/src/osm/jp/gpx/matchtime/gui/ParameterPanelFolder.java b/importPicture/src/osm/jp/gpx/matchtime/gui/ParameterPanelFolder.java index 9b243fe..208a928 100644 --- a/importPicture/src/osm/jp/gpx/matchtime/gui/ParameterPanelFolder.java +++ b/importPicture/src/osm/jp/gpx/matchtime/gui/ParameterPanelFolder.java @@ -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()); } } -- 2.11.0