我正在尝试im4java样例TestCase10处理管道。
https://github.com/Widen/im4java/blob/master/src/org/im4java/test/TestCase10.java
public class im4Test {
public static void main(String[] args) throws Exception {
IMOperation op = new IMOperation();
op.addImage("-"); // read from stdin
op.addImage("tif:-"); // write to stdout in tif-format
// set up pipe(s): you can use one or two pipe objects
FileInputStream fis = new FileInputStream("ABC.png");
FileOutputStream fos = new FileOutputStream("ABC.tif");
// Pipe pipe = new Pipe(fis,fos);
Pipe pipeIn = new Pipe(fis,null);
Pipe pipeOut = new Pipe(null,fos);
// set up command
ConvertCmd convert = new ConvertCmd();
convert.setInputProvider(pipeIn);
convert.setOutputConsumer(pipeOut);
convert.run(op);
fis.close();
fos.close();
}
}
面对下面的例外,任何关于正在发生的事情的线索都是非常感谢的。
Exception in thread "main" org.im4java.core.CommandException: java.io.IOException: The pipe is being closed
at org.im4java.core.ImageCommand.run(ImageCommand.java:219)
at com.cvc.image.im4Test.main(im4Test.java:28)
Caused by: java.io.IOException: The pipe is being closed
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:326)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at java.io.FilterOutputStream.close(FilterOutputStream.java:158)
at org.im4java.process.ProcessStarter.processInput(ProcessStarter.java:261)
at org.im4java.process.ProcessStarter.waitForProcess(ProcessStarter.java:423)
at org.im4java.process.ProcessStarter.run(ProcessStarter.java:313)
at org.im4java.core.ImageCommand.run(ImageCommand.java:215)
... 1 more
Note: Running on windows, and using ImageMagick.
Found the issue, on debugging further. Posting it as answer for the benefit of others.
Windows platform has its own 'convert' command and it is interfering.
Ecplise IDE is picking windows command, even though I made sure that ImageMagick 'convert' command is in the system path and accessible in command line and have restarted Eclipse.
To make it work, had to explicitly set ImageMagick search path.
ConvertCmd.setSearchPath('imageMagickBinDirPath')