0

画像に方向フラグが設定されているかどうかを確認するために使用jheadしています。設定されている場合は、画像を回転し、表示時に回転する必要がないことを示すexif情報を設定します。コマンドラインでは、次のようになります。

jhead -autorot 'IMG_3680.JPG'

ProcessBuilder見ている画像のJavaアプリからこれを呼び出すために使用しようとしjpegtranていますが、実際の画像の回転を行うために使用します。これらのアプリは両方ともコマンドラインから正しく動作し、/opt/local/bin私のMacにあります。

私は得続けます:

sh: jpegtran: command not found

Error : Problem executing specified command
in file '/images/IMG_3681.JPG'

私のコードは次のとおりです。

public static void main(String[] args) throws Exception {

    File[] files = (new File("/images")).listFiles();
    for (File file : files){
      ProcessBuilder pb = new ProcessBuilder("jhead", "-autorot", file.getAbsolutePath());
      pb.redirectOutput(Redirect.INHERIT);
      pb.redirectError(Redirect.INHERIT);
      Process p = pb.start();
    }
}

電話をかけるProcessBuilderためにヒントを提供する必要がありますか?jheadjpegtran

4

1 に答える 1

0

推測を行った結果、PATH環境変数が正しく設定されていないと判断しました。明らかに含まれて /usr/bin:/bin:/usr/sbinいないものがあり/opt/local/binました。私はそれを次のように追加しました:

Map<String, String> env = pb.environment();
env.put("PATH", env.get("PATH")+":/opt/local/bin/");

これで正しい結果が得られます。ただし、実際の解決策は/opt/local/bin/PATH環境変数に追加することであり、これをコードに直接追加しないことです。


更新:もう少し調べてみると、Eclipseではなくターミナルからアプリを実行した場合、これは問題ではなかったようです。PATH変数はターミナルで正しく設定されていますが、Eclipseに追加する必要がありました。Eclipseに追加するには:

  1. [実行]->[構成の実行]->[環境]に移動します
  2. [新規]をクリックし、[名前]と[PATH値]を入力します/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin/
  3. [適用]をクリックします。

OS Xでこれを設定する必要がある場合は、いくつかの方法(または実際にはいくつかの場所)があるようです。Spotlightを介して起動されるアプリケーションで必要な場合は、ここにアクセスしてください。ターミナルの場合は、ここに移動するよりも設定する必要があります。

于 2012-12-04T06:05:33.777 に答える