import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
-import org.apache.commons.imaging.formats.tiff.write.TiffOutputDirectory;
-import org.apache.commons.imaging.formats.tiff.write.TiffOutputField;
-import org.apache.commons.imaging.formats.tiff.write.TiffOutputSet;
/**
* 本プログラムのメインクラス
JPanel argsPanel; // パラメータ設定パネル (上部)
JScrollPane imageSPane; // スクロールパネル
JLabel imageLabel; // 基準時刻画像表示
- JCheckBox exifBase; // EXIF日時を基準にする/ !(ファイル更新日時を基準にする)
+ ButtonGroup baseTimeGroup; // 基準時刻の指定グループ
+ JRadioButton exifBase; // EXIF日時を基準にする/ !(ファイル更新日時を基準にする)
+ JRadioButton fupdateBase; // File更新日時を基準にする/ !(XIF日時を基準にする)
JCheckBox noFirstNode; // GPX: <trkseg>セグメントの最初の1ノードは無視する。 {ON | OFF}
JCheckBox gpxReuse; // 生成されたGPXファイル(ファイル名が'_.gpx'で終わるもの)も対象にする。 {ON | OFF}
JTextArea textArea; // 実行結果表示領域
arg2_baseTimeImg = new ParameterPanelImageFile("基準時刻画像: ", params.getProperty(AppParameters.IMG_BASE_FILE), arg1_srcFolder);
argsPanel.add(arg2_baseTimeImg);
- exifBase = new JCheckBox("EXIFの日時を基準にする", false);
- exifBase.setEnabled(false);
+ baseTimeGroup = new ButtonGroup();
+ exifBase = new JRadioButton("EXIFの日時を基準にする");
+ fupdateBase = new JRadioButton("File更新日時を基準にする");
+ baseTimeGroup.add(exifBase);
+ baseTimeGroup.add(fupdateBase);
argsPanel.add(exifBase);
+ argsPanel.add(fupdateBase);
+ if (params.getProperty(AppParameters.GPX_BASETIME).equals("EXIF_TIME")) {
+ fupdateBase.setSelected(false);
+ exifBase.setSelected(true);
+ }
+ else {
+ fupdateBase.setSelected(true);
+ exifBase.setSelected(false);
+ }
cards[cardNo].add(argsPanel, BorderLayout.CENTER);
//---------------------------------------------------------------------
noFirstNode = new JCheckBox("<trkseg>セグメントの最初の1ノードは無視する。", params.getProperty(AppParameters.GPX_NO_FIRST_NODE).equals("ON"));
tmpPanel4a.add(noFirstNode);
gpxReuse = new JCheckBox("生成されたGPXファイル(ファイル名が'_.gpx'で終わるもの)も対象にする。", params.getProperty(AppParameters.GPX_REUSE).equals("ON"));
- gpxReuse.setEnabled(false);
+ gpxReuse.setEnabled(true);
tmpPanel4a.add(gpxReuse);
cards[cardNo].add(tmpPanel4a, BorderLayout.CENTER);
long lastModifyTime = timeFile.lastModified();
arg3_basetiome.argField.setText(ImportPicture.dfjp.format(new Date(lastModifyTime)));
- try {
- ImageMetadata meta = Imaging.getMetadata(timeFile);
- if (!(meta instanceof JpegImageMetadata)) {
- TiffImageMetadata exif = ((JpegImageMetadata)meta).getExif();
- if (exif != null) {
- TiffOutputSet outputSet = exif.getOutputSet();
- TiffOutputDirectory exifDir = outputSet.getOrCreateExifDirectory();
- TiffOutputField field = exifDir.findField(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL);
- arg3_basetiome.argField.setText(field.toString());
+ 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();
+ if (exif != null) {
+ String dateTimeOriginal = exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0];
+ lastModifyTime = (new SimpleDateFormat("yyyy:MM:dd HH:mm:ss")).parse(dateTimeOriginal).getTime();
+ arg3_basetiome.argField.setText(ImportPicture.dfjp.format(new Date(lastModifyTime)));
+ }
+ else {
+ arg3_basetiome.argField.setText("exif == null");
+ }
}
- }
+ }
+ catch (Exception e) {}
}
- catch (Exception e) {}
int size_x = imageSPane.getWidth() - 8;
ImageIcon tmpIcon = new ImageIcon(path);
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.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_OUTPUT_FOLDER, arg4_gpxFolder.getText());
try {
this.params.store();
}