* ```\r
* \r
* exp) $ java -jar Restamp.jar argv[0] argv[1] argv[2] argv[3] argv[4]\r
+ * exp) $ java -jar Restamp.jar argv[0] argv[1] argv[2] argv[3] argv[4] argv[5]\r
* \r
* @param argv\r
* argv[0] = 画像ファイルが格納されているディレクトリ --> imgDir\r
* argv[2] = 基準画像ファイルの精確な撮影日時 "yyyy-MM-dd HH:mm:ss z" --> baseTime1\r
* argv[3] = 時刻補正の基準とする画像ファイル --> baseFile2\r
* argv[4] = 基準画像ファイルの精確な撮影日時 "yyyy-MM-dd HH:mm:ss z" --> baseTime2\r
+ * argv[5] = (option)変換済み画像ファイルの出力フォルダ.省略した場合は元画像を直接上書きする --> outputDir\r
* @throws ImageReadException \r
*/\r
public static void main(String[] argv) throws Exception\r
{\r
if (argv.length < 5) {\r
- System.out.println("java Restamp <imgDir> <baseFile1> <timeStr1> <baseFile2> <timeStr2>");\r
+ System.out.println("java osm.surveyor.matchtime.Restamp <imgDir> <baseFile1> <timeStr1> <baseFile2> <timeStr2>");\r
+ System.out.println("java osm.surveyor.matchtime.Restamp <imgDir> <baseFile1> <timeStr1> <baseFile2> <timeStr2> <output dir>");\r
return;\r
}\r
\r
Path imgDir = Paths.get(argv[0]);\r
- if (!Files.exists(imgDir)) {\r
- // "[error] <imgDir>が存在しません。"\r
- System.out.println(i18n.getString("msg.200"));\r
- return;\r
- }\r
- if (!Files.isDirectory(imgDir)) {\r
- // "[error] <imgDir>がフォルダじゃない"\r
- System.out.println(i18n.getString("msg.210"));\r
- return;\r
+ \r
+ Path outDir = imgDir;\r
+ if (argv.length >= 6) {\r
+ outDir = Paths.get(argv[5]);\r
}\r
\r
Path baseFile1 = Paths.get(imgDir.toString(), argv[1]);\r
- if (!Files.exists(baseFile1)) {\r
- // "[error] <baseFile1>が存在しません。"\r
- System.out.println(i18n.getString("msg.220"));\r
- return;\r
- }\r
- if (!Files.isRegularFile(baseFile1)) {\r
- // "[error] <baseFile1>がファイルじゃない"\r
- System.out.println(i18n.getString("msg.230"));\r
- return;\r
- }\r
\r
DateFormat df1 = new SimpleDateFormat(TIME_PATTERN);\r
Date baseTime1 = df1.parse(argv[2]);\r
+ Date baseTime2 = df1.parse(argv[4]);\r
\r
Path baseFile2 = Paths.get(imgDir.toString(), argv[3]);\r
- if (!Files.exists(baseFile2)) {\r
- // "[error] <baseFile2>が存在しません。"\r
- System.out.println(i18n.getString("msg.240"));\r
- return;\r
- }\r
- if (!Files.isRegularFile(baseFile2)) {\r
- // "[error] <baseFile2>がファイルじゃない"\r
- System.out.println(i18n.getString("msg.250"));\r
- return;\r
- }\r
- \r
- Date baseTime2 = df1.parse(argv[4]);\r
\r
Restamp obj = new Restamp();\r
- obj.setUp(imgDir, baseFile1, baseTime1, baseFile2, baseTime2);\r
+ if (obj.setUp(imgDir, baseFile1, baseTime1, baseFile2, baseTime2, outDir)) {\r
+ obj.start();\r
+ try {\r
+ obj.join();\r
+ } catch(InterruptedException end) {}\r
+ if (obj.ex != null) {\r
+ throw obj.ex;\r
+ }\r
+ }\r
}\r
\r
Path imgDir;\r
- //Path outDir;\r
+ Path outDir;\r
Date baseTime1;\r
Date baseTime2;\r
Path baseFile1;\r
Path baseFile2;\r
public static ResourceBundle i18n = ResourceBundle.getBundle("i18n");\r
\r
+ /**\r
+ * パラメータの設定とチェック\r
+ * @param imgDir\r
+ * @param baseFile1\r
+ * @param baseTime1\r
+ * @param baseFile2\r
+ * @param baseTime2\r
+ * @param outDir\r
+ * @return パラメータチェックに合格すればtrue\r
+ * @throws Exception \r
+ */\r
@SuppressWarnings("Convert2Lambda")\r
- public void setUp(\r
+ public boolean setUp(\r
Path imgDir, \r
Path baseFile1, Date baseTime1, \r
- Path baseFile2, Date baseTime2) throws Exception {\r
+ Path baseFile2, Date baseTime2,\r
+ Path outDir) throws Exception {\r
this.imgDir = imgDir;\r
+ this.outDir = outDir;\r
this.baseTime1 = baseTime1;\r
this.baseTime2 = baseTime2;\r
this.baseFile1 = baseFile1;\r
this.baseFile2 = baseFile2;\r
\r
- /*\r
- File outDir = new File(imgDir, "restamp.out");\r
- if (outDir.exists()) {\r
- // "[error] <outDir>が存在する。"\r
- if (!outDir.isDirectory()) {\r
- // "[error] <outDir>がフォルダじゃない"\r
+ // <imgDir:ソースフォルダ>のチェック\r
+ if (!Files.exists(imgDir)) {\r
+ // "[error] <imgDir>が存在しません。"\r
+ System.out.println(i18n.getString("msg.200"));\r
+ return false;\r
+ }\r
+ if (!Files.isDirectory(imgDir)) {\r
+ // "[error] <imgDir>がフォルダじゃない"\r
+ System.out.println(i18n.getString("msg.210"));\r
+ return false;\r
+ }\r
+ \r
+ // <outDir>のチェック\r
+ if (Files.exists(outDir)) {\r
+ if (!Files.isDirectory(outDir)) {\r
+ // "[error] <出力先フォルダ>はフォルダじゃない"\r
System.out.println(i18n.getString("msg.270"));\r
- return;\r
+ return false;\r
}\r
}\r
else {\r
- // "<outDir>が存在しない。"\r
- outDir.mkdir();\r
+ // "[error] <outDir>は存在しません。"\r
+ try {\r
+ Files.createDirectories(outDir);\r
+ }\r
+ catch (IOException e) {\r
+ System.out.println(i18n.getString("msg.275"));\r
+ return false;\r
+ }\r
+ }\r
+ if (!Files.isWritable(outDir)) {\r
+ // "[error] <出力先フォルダ>には書き込みできません"\r
+ System.out.println(i18n.getString("msg.275"));\r
+ return false;\r
}\r
- this.outDir = outDir;\r
- */\r
\r
- this.start();\r
- try {\r
- this.join();\r
- } catch(InterruptedException end) {}\r
- if (this.ex != null) {\r
- throw this.ex;\r
+ // <baseFile1>のチェック\r
+ if (!Files.exists(baseFile1)) {\r
+ // "[error] <baseFile1>が存在しません。"\r
+ System.out.println(i18n.getString("msg.220"));\r
+ return false;\r
}\r
+ if (!Files.isRegularFile(baseFile1)) {\r
+ // "[error] <baseFile1>がファイルじゃない"\r
+ System.out.println(i18n.getString("msg.230"));\r
+ return false;\r
+ }\r
+\r
+ // <baseFile2>のチェック\r
+ if (!Files.exists(baseFile2)) {\r
+ // "[error] <baseFile2>が存在しません。"\r
+ System.out.println(i18n.getString("msg.240"));\r
+ return false;\r
+ }\r
+ if (!Files.isRegularFile(baseFile2)) {\r
+ // "[error] <baseFile2>がファイルじゃない"\r
+ System.out.println(i18n.getString("msg.250"));\r
+ return false;\r
+ }\r
+ \r
+ return true;\r
}\r
\r
@Override\r
@Before
public void setUp() {
dirPath = "./src/test/data/images";
+ outPath = "./out";
}
@After
public void tearDown() {
+
}
String dirPath;
+ String outPath;
@Test
public void testMain() {
}
}
+ @Test
+ public void testMain_5() {
+ String[] ans = {
+ "2019-09-04 16:26:53 JST", // 0.0
+ "2019-09-04 16:26:55 JST", // 2.0
+ "2019-09-04 16:26:58 JST", // 3.0
+ "2019-09-04 16:27:00 JST", // 2.0
+ "2019-09-04 16:27:03 JST", // 3.0
+ "2019-09-04 16:27:05 JST", // 2.0
+ "2019-09-04 16:27:08 JST", // 3.0
+ "2019-09-04 16:27:10 JST", // 2.0
+ "2019-09-04 16:27:13 JST", // 3.0
+ };
+
+ try {
+ String[] argv = new String[]{
+ dirPath,
+ "00003.jpg",
+ "2019-09-04 16:26:58 JST",
+ "00005.jpg",
+ "2019-09-04 16:27:03 JST",
+ outPath
+ };
+ Restamp.main(argv);
+ check(new File(outPath), ans);
+ }
+ catch (Exception e) {
+ fail();
+ }
+ }
+
void check(File imgDir, String[] ans) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
File[] files = imgDir.listFiles();
+ assertThat(files.length, is(ans.length));
+
java.util.Arrays.sort(files, (File file1, File file2) -> file1.getName().compareTo(file2.getName()));
int i = 0;